How can I databind dynamically load DataGridViews?
I am developing a Windows Forms Application in VS2008. I want to display an unknown but small number of DataGridViews on a form using code like this:
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);
}
The grid (s) is added to the panel, but no internal data is displayed. My guess is that the DataSource property does not bind the actual grid binding because (for example) the dataGridView_ColumnAdded event is not fired.
QueryFilter and QueryFilterNode are POCO only and contain data of course.
For completeness of building 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;
}
a source to share
Hmm, it looks like it was my own mistake. QueryFilterNode used as datasource ( BindingList<QueryFilterNode>
) was not POCO but datacontract. Excerpt:
[DataContract(Name = "QueryFilterNode")]
public class QueryFilterNode
{
[DataMember(IsRequired = true)]
public string FieldCode;
For some reason, they cannot be database bound. I used a simple class like this in my BindingList and it just worked.
class QueryFilterNodeSimple
{
public string FieldCode
{ get; set; }
a source to share