代码之家  ›  专栏  ›  技术社区  ›  edosoft

如何对动态加载的DataGridView进行数据绑定?

  •  0
  • edosoft  · 技术社区  · 16 年前

    我正在开发VS2008中的Windows窗体应用程序。我想在一个表单上显示一个未知但数量很少的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);                    
    }
    

    网格将添加到面板,但不显示其中的数据。我猜设置datasource属性实际上并没有绑定网格,因为(例如)DataGridView的ColumnAdded事件没有被激发。

    queryfilter和queryfilternode只是poco的,当然包含数据。

    为了完整起见,数据报视图的构造:

    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;
    }
    
    1 回复  |  直到 16 年前
        1
  •  0
  •   edosoft    16 年前

    嗯,这似乎是我自己的错。 queryfilternode,用作数据源( BindingList<QueryFilterNode> )不是Poco,而是一个数据合同。片段:

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

    由于某些原因,这些不能进行数据绑定。我在绑定列表中使用了这样一个简单的类,它刚刚生效。

    class QueryFilterNodeSimple
    {
    
      public string FieldCode
      { get; set; }
    
    推荐文章