2009-05-07 3 views
0

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; 
} 
+0

Woran ist die BindingList gebunden? Ich glaube, dass Sie die BindingList.DataSource-Eigenschaft festlegen müssen. – NYSystemsAnalyst

Antwort

0

Hmm, es scheint, es ist mein eigener Fehler war. QueryFilterNode, als Datenquelle verwendet (BindingList<QueryFilterNode>) war kein POCO, sondern ein Datenvertrag. Snippet:

[DataContract(Name = "QueryFilterNode")] 
public class QueryFilterNode 
{ 
    [DataMember(IsRequired = true)] 
    public string FieldCode;   

Aus irgendeinem Grund können diese nicht datengebunden sein. Ich habe eine einfache Klasse wie diese in meiner BindingList verwendet und es hat einfach funktioniert.

class QueryFilterNodeSimple 
{ 

    public string FieldCode 
    { get; set; } 
+1

Ich denke, die Daten müssen in Eigenschaften, nicht in Feldern sein. – Gman