2009-05-07 5 views
0

私はVS2008でWindows Formsアプリケーションを開発しています。 Iは、未知を表示するが、このようなコードを使用して、フォーム上のDataGridViews少数:動的に読み込まれたDataGridViewをどのようにデータバインドできますか?

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);      
} 

グリッド(単数または複数)は、パネルに追加されるが、内部のデータが表示されません。私の推測では、DataGridView_ColumnAddedイベントが発生しないため、DataSourceプロパティが実際にグリッドにバインドされていないことを設定しています。

QueryFilterとQueryFilterNodeは単なるPOCOであり、もちろんデータを含んでいます。完全期すため

の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

BindingListはどのようにバインドされていますか? BindingList.DataSourceプロパティを設定する必要があると思います。 – NYSystemsAnalyst

答えて

0

うーん、それは私自身の間違いだったようです。 データソース(BindingList<QueryFilterNode>)として使用されているQueryFilterNodeは、POCOではなくdatacontractでした。スニペット:

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

何らかの理由でこれらをデータバインドすることはできません。私はBindingListの中でこのようなシンプルなクラスを使いました。

class QueryFilterNodeSimple 
{ 

    public string FieldCode 
    { get; set; } 
+1

私はデータがプロパティではなくフィールドでなければならないと思います。 – Gman

関連する問題