Я разрабатываю приложение Windows Forms в VS2008. Я хочу отобразить неизвестное, но небольшое количество DataGridViews на форме, используя такой код:
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;
}