2017-05-24 6 views
1

In diesem Code erstelle ich nur wenige DataGridViews. Die Anzahl dieser hängt von der Datei ab, die bei jedem Start der Anwendung unterschiedlich ist, ebenso die Anzahl der DataGridViews.Zugriffsobjekt, das mit einer anderen Methode erstellt wurde C#

Wie kann ich auf bestimmte dataGridView grid[i] zugreifen und ändern, von welchem ​​Ereignis Form1_UserAddedRow in dieser Methode aufgerufen wurde?

Code:

public void Form1_Load(object sender, EventArgs e) 
{ 
    string[] lines = System.IO.File.ReadAllLines(@"..\..\Base.txt"); 

    int diet_num = 0; 
    int grid_num = 0; 

    foreach (string x in lines) diet_num++; 

    grid_num = (diet_num/Constant.DATAGRID_DIETS_IN_GRID) + 1; 

    DataGridView[] grid = new DataGridView[grid_num]; 
    for (int i = 0; i < grid_num; i++) 
    { 
     grid[i] = new DataGridView(); 
     grid[i].Tag = i; 
     grid[i].Parent = this; 
     grid[i].Location = new Point(12, 12 + (8 + Constant.DATAGRID_ROW_HEIGHT * 2) * i); 
     grid[i].Visible = true; 
     grid[i].RowHeadersVisible = false; 
     grid[i].Height = Constant.DATAGRID_ROW_HEIGHT * 2; 
     grid[i].Width = Constant.DATAGRID_COLUMN_SIZE * Constant.DATAGRID_DIETS_IN_GRID + 3; 
     grid[i].UserAddedRow += Form1_UserAddedRow; 
    } 
    this.Width = Constant.DATAGRID_COLUMN_SIZE * Constant.DATAGRID_DIETS_IN_GRID + 40; 


    foreach (string x in lines) 
    { 
     DataGridViewColumn col = new DataGridViewTextBoxColumn(); 
     col.Width = Constant.DATAGRID_COLUMN_SIZE; 

     col.HeaderText = x; 
     int colIndex = grid[0].Columns.Add(col); 
    } 
} 

private void Form1_UserAddedRow(object sender, DataGridViewRowEventArgs e) 
{ 
    //I want to access grid[i] and modify it here. 
} 

Antwort

0

Sie sind die DataGridViewRowEventArgs e als Argument für Ihre Event-Handler bekommen und somit können Sie die Eigenschaft zugreifen wie

e.Row.Cells["somename"].Value = "some_value"; 
+0

Aber kann ich auf den ganzen Datagridview zugreifen? Edit: Oh mein, ich kann über diese Zeile auf Datagridview zugreifen. Vielen Dank, geschätzt :) –

+1

Siehe oben Antwort. Sie sollten in der Lage sein, das Argument "sender" in Ihrem Event-Handler zu verwenden. – PentaPenguin

1

Sie sollten den Sender Objekt werfen können, Parameter in Ihrem Event-Handler zu dem Typ von DataGridView, um das Raster zu erhalten, das ausgeführt wurde.

0
private void Form1_UserAddedRow(object sender, DataGridViewRowEventArgs e) 
{ 
    var grid = sender as DataGridView; 
    if (grid == null) return; 

    //... do something 

} 
+0

** Von Review Queue **: Darf ich Sie bitten, bitte etwas Kontext um Ihren Source-Code hinzuzufügen. Nur-Code-Antworten sind schwer zu verstehen. Es wird sowohl dem Fragesteller als auch zukünftigen Lesern helfen, wenn Sie in Ihrem Beitrag weitere Informationen hinzufügen können. – RBT

+0

Danke für Ihre Anfrage. Ich werde es in Zukunft tun. Habe einfach den Kontext weggelassen, weil ich es eilig hatte und es sich ziemlich selbsterklärend verhält. – CHS

Verwandte Themen