绑定时DataGridView没有从DataTable获取列

时间:2013-07-10 17:46:56

标签: vb.net datagridview

我有DataGridView我绑定到表格。在我执行以下代码后:

Dim filterTable As New DataTable
filterTable.Columns.Add("KeyName")
filterTable.Columns.Add("Path")

GridView.DataSource = filterTable

GridView.Columns.Count remains 0.

基本上,调用BindUnidentifiedKeys(UnidentifiedKeys As Dictionary(Of String, String), ByRef GridView As DataGridView)

我称之为: UnidentifiedKeysManager.Instance.BindUnidentifiedKeys(UnidentifiedKeysManager.Instance.GetKeys, grdUnidentifiedKeys)

我通过引用传递了字典和DataGridView

然而,当我将数据源设置为具有列的数据表时,GridView的列仍为0。我不知道为什么会这样。

4 个答案:

答案 0 :(得分:0)

GridView没有任何列,在这种情况下,DataTable没有。 GridView拥有自己的列集,并且与datasource不同。

答案 1 :(得分:0)

尝试创建BindingSource并将其DataSource设置为filterTable,然后将DataGridView的DataSource设置为BindingSource

示例:

BindingSource bs = new BindingSource();
bs.DataSource = filterTable;
GridView.DataSource = bs;
GridView.Refresh();

还查看文档......

http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.datasource.aspx http://msdn.microsoft.com/en-us/library/y0wfd4yz(v=vs.90).aspx

答案 2 :(得分:0)

绑定到DataGridView时,请注意属性 AutoGenerateColumns 。如果在将数据表绑定到DataGridView时将此属性设置为True,它将根据数据表中定义的列生成列,这可能是您所追求的:

Dim filterTable As New DataTable
filterTable.Columns.Add("KeyName")
filterTable.Columns.Add("Path")

GridView.AutoGenerateColumns = True
GridView.DataSource = filterTable

或者,您可以进入设计器并手动在DataGridView中创建列。对绑定的网格视图执行此操作时,请设置每个列的 DataPropertyName 属性,该属性将gridview列绑定到数据表中的相应列/字段(确保在两者中保留列顺序)。在这种情况下,您不希望自动生成列。您也可以通过编程方式执行此操作。

答案 3 :(得分:0)

我必须这样做,以确保有时候列总是存在..

GridView.Columns.Clear();
GridView.DataSource = null;
GridView.AutoGenerateColumns = true;
GridView.DataSource = datasource
GridView.DataMember = "Table1";