我们只是动态创建一个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!
为什么会出现这种情况?有解决方法吗?
答案 0 :(得分:1)
我有类似的问题,但我不确定它可以帮到你。
您可以将处理程序附加到DataGridView.DataBindingComplete
事件。
当主线程中显示DataGridView
时,如果会引发该事件并且您已创建并可访问所有列
答案 1 :(得分:0)
AutoGenerateColumns
属性生成的列需要BindingContext
来正确生成和管理单元格值的绑定。通常,在设置父控件之前,无法确定BindingContext。