【发布时间】:2018-08-13 08:23:23
【问题描述】:
VB.NET: 我一直将绑定源与数据集一起使用,并使用填充命令,然后填充网格等 - 没问题,但由于我工作的性质,我不得不使用编程编码的数据集,因为操作需要在幕后进行为我受雇的公司工作。
所以,我的代码如下所示: 在一个表单中,我在顶部声明了(因为我需要从表单的其他部分访问它
Dim Facility_Table As DataTable
然后在我的加载子中,我调用了一个子(我会削减所有内容,使其尽可能短)
Private Sub CreateNewDataTable()
Try
Facility_Table.Clear()
Facility_Table.Columns.Add("Level1", GetType(String))
Facility_Table.Columns.Add("Level2", GetType(String))
End Sub
然后调用另一个子 (refreshlist) 从 SQL Server 获取一些数据并将其铲到新行中的字段中。
'Facility_Table.Reset()
Facility_Table.Clear()
Facility_Table.NewRow()
Facility_Table.Rows.Add(.Rows(Z).Item("Level1").ToString,
.Rows(Z).Item("Level2").ToString)
然后我调用一个 refreshsource 子:- 现在我正常执行此操作,与将网格绑定到数据源而不是我的代码不同,这是我通过谷歌搜索在互联网上提取的内容以使用我的数据表。
Dim Dset As New DataSet()
' Dset.Tables.Remove(Facility_Table)
Dset = New DataSet()
Dset.Tables.Add(Facility_Table)
Dim bs As BindingSource
bs = New BindingSource()
bs.DataSource = Dset
bs.DataMember = Dset.Tables(0).TableName
DataGridView2.DataSource = Nothing
DataGridView2.DataSource = bs
DataGridView2.Refresh()
它第一次运行良好 - 然后如果我点击我的树视图转到不同的“Level1”并调用刷新列表子我得到异常:
"DataTable 已经属于另一个 DataSet。"
如您所见,从注释行中,我尝试在重新添加之前删除表格,但没有运气。
我认为只需清除数据表,然后重新填充并重新绑定它就可以了,但我有一种感觉,我在某个地方错过了一步,我希望它只是一个班轮或者最坏的情况是添加几行代码。
任何帮助将不胜感激,感谢您的宝贵时间!
【问题讨论】:
-
清除 DataTable 中的行会作用于 Rows 集合,并且不会更改 Datatable 本身。严格来说,您根本不需要 DataSet,尤其是在只有一个 DT 的情况下。同一个 DT(和/或 DS)可以是多个控件的数据源。您还可以使用 DataViews 来区分
-
只是不要以这种方式重复使用它。如果您需要在其他地方访问它,请使其可访问,如果您需要类似的表,请创建一个新表。
标签: vb.net datatable bind programmatically