2009-05-07 6 views
0

저는 VS2008에서 Windows Forms 응용 프로그램을 개발하고 있습니다. 나는 다음과 같은 코드를 사용하여 폼에 DataGridViews의 알 수없는, 그러나 적은 수를 표시하려면 :어떻게 동적으로로드 된 DataGridViews를 데이터 바인딩 할 수 있습니까?

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

관련 문제