0

我正在 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;
}
4

1 回答 1

0

嗯,看来是我自己的错。用作数据源 ( BindingList<QueryFilterNode>) 的 QueryFilterNode 不是 POCO,而是数据合约。片段:

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

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

class QueryFilterNodeSimple
{

  public string FieldCode
  { get; set; }
于 2009-05-07T15:01:42.187 回答