设置Datasource后无法访问DataGridView列

时间:2014-05-20 14:30:24

标签: vb.net winforms datagridview

我有一个奇怪的问题。我通过设置datatable属性将DataGridView绑定到.DataSource,之后我无法访问DataGridView列。

Dim dtPML As New DataTable

dtPML.Columns.Add("ID_IN_DATASOURCE", Type.GetType("System.String"))
dtPML.Columns.Add("SELECTED", Type.GetType("System.Boolean"))
dtPML.Columns.Add("DESCRIPTION", Type.GetType("System.String"))

grdHorizonPMLRadit.DataSource = dtPML

'next line fails with NullReferenceException
grdHorizonPMLRadit.Columns("ID_IN_DATASOURCE").Visible = False  

检查grdHorizonPMLRadit.Columns.Count时,它会显示零列,但CType(grdHorizonPMLRadit.DataSource, DataTable).Columns.Count会返回3.

为什么还没有DataGridViewDatatable生成列?

.AutoGenerateColumns属性设置为true。是在另一个线程中完成还是仅在绘制网格时?如果我只是设置了Datasource并且没有触及.Columns集合,直到表单完全加载,那么列就可以访问了。

奇怪的是,我之前已经做过这件事并且工作正常。我最近切换到Visual Studio 2013,Datagridview数据处理是否有某些变化? 提前谢谢。

2 个答案:

答案 0 :(得分:1)

是的,您注意到的行为是正常。即使您设置了DataSource属性,DatagridView也不会创建列,直到显示网格。

尝试在DataGridView.DataBindingComplete事件中移动此行代码以确保创建列:

grdHorizonPMLRadit.Columns("ID_IN_DATASOURCE").Visible = False  

答案 1 :(得分:0)

这已经很老了,所以我想给出一个笼统的答案。

TD;DL:您的 DataGridView 必须在表单内。与显示无关。

示例代码:

Dim dataGrid = New DataGridView()

' This is needed to make the DataTable apply to DataGridView
Dim form = New System.Windows.Forms.Form()       
form.Controls.Add(dataGrid)

dataGrid.DataSource = createDataTable()

' dataGrid.Columns.Count() > 0