Ich entwickle eine Windows Forms-Anwendung in VS2008. Ich mag eine unbekannte angezeigt, aber kleine Anzahl von DataGridViews auf einem Formular, Code wie folgt verwendet:Wie kann ich dynamisch geladene DataGridViews Datenbaninden?
foreach (QueryFilter f in Query.Filter)
{
DataGridView grid = CreateGridView(String.Format("GridView{0}", filters.Count));
grid.Location = new System.Drawing.Point(3, 9 + (filters.Count * grid.Height + 9));
BindingList<QueryFilterNode> nodes = new BindingList<QueryFilterNode>();
foreach (QueryFilterNode node in f)
nodes.Add(node);
grid.DataSource = nodes;
panel1.Controls.Add(grid);
filters.Add(nodes);
}
Das Raster (n) wird den Panel hinzugefügt, aber die Innendaten werden nicht angezeigt. Meine Annahme ist, dass die DataSource-Eigenschaft das Grid nicht wirklich bindet, weil (zum Beispiel) das dataGridView_ColumnAdded-Ereignis nicht ausgelöst wurde.
Queryfilter und QueryFilterNode sind nur POCO und Daten natürlich enthalten.
Der Vollständigkeit halber der Aufbau des Datagridview:
private DataGridView CreateGridView(string name)
{
DataGridView grid = new DataGridView();
grid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
grid.Name = name;
grid.Size = new System.Drawing.Size(484, 120);
grid.ColumnAdded += new System.Windows.Forms.DataGridViewColumnEventHandler(this.dataGridView_ColumnAdded);
return grid;
}
Woran ist die BindingList gebunden? Ich glaube, dass Sie die BindingList.DataSource-Eigenschaft festlegen müssen. – NYSystemsAnalyst