我正在开发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; }
嗯,这似乎是我自己的错。 queryfilternode,用作数据源( BindingList<QueryFilterNode> )不是Poco,而是一个数据合同。片段:
BindingList<QueryFilterNode>
[DataContract(Name = "QueryFilterNode")] public class QueryFilterNode { [DataMember(IsRequired = true)] public string FieldCode;
由于某些原因,这些不能进行数据绑定。我在绑定列表中使用了这样一个简单的类,它刚刚生效。
class QueryFilterNodeSimple { public string FieldCode { get; set; }