除非添加到表单中,否则动态创建的datagridview列无法访问...为什么?

时间:2010-06-17 07:10:53

标签: c# winforms datagridview

我们只是动态创建一个DataGridView控件并将其绑定到DataTable。我们想要设置某些列的样式。但是,当我们尝试访问列时,我们得到了一个空引用。在进一步调查中,我们发现如果我们将DataGridView控件添加到主窗体,然后尝试访问其列,它工作正常!

抛出错误的代码:

DataGridView gv = new DataGridView();
gv.DataSource = GetDataTable(); //binding it to datatable
Debug.Assert(gv.Columns == null);

运作良好的代码:

DataGridView gv = new DataGridView();
gv.DataSource = GetDataTable(); //binding it to datatable
this.Controls.Add(gv); //adding to form
Debug.Assert(gv.Columns == null); //the assertion fails!

为什么会出现这种情况?有解决方法吗?

2 个答案:

答案 0 :(得分:1)

我有类似的问题,但我不确定它可以帮到你。

您可以将处理程序附加到DataGridView.DataBindingComplete事件。

当主线程中显示DataGridView时,如果会引发该事件并且您已创建并可访问所有列

答案 1 :(得分:0)

呃,在黑暗中有点刺伤;但可能是因为使用AutoGenerateColumns属性生成的列需要BindingContext来正确生成和管理单元格值的绑定。通常,在设置父控件之前,无法确定BindingContext。