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