【问题标题】:How can I databind dynamically loaded DataGridViews?如何绑定动态加载的 DataGridViews?
【发布时间】:2009-05-07 12:59:29
【问题描述】:

我正在 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,当然包含数据。

为了完整起见,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;
}

【问题讨论】:

  • BindingList 绑定到什么?我相信您需要设置 BindingList.DataSource 属性。

标签: winforms datagridview datasource


【解决方案1】:

嗯,看来是我自己搞错了。 用作数据源 (BindingList&lt;QueryFilterNode&gt;) 的 QueryFilterNode 不是 POCO,而是数据合约。片段:

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

由于某种原因,这些无法进行数据绑定。我在我的 BindingList 中使用了这样一个简单的类,它就可以工作了。

class QueryFilterNodeSimple
{

  public string FieldCode
  { get; set; }

【讨论】:

  • 我认为数据必须在属性中,而不是在字段中。
猜你喜欢
  • 1970-01-01
  • 2013-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-22
  • 2011-11-08
  • 2013-01-07
  • 2013-04-05
相关资源
最近更新 更多