VB.NET: 我总是使用bindingsource与数据集并使用fill命令,然后填充网格等 - 没问题,但我不得不使用编程编码的数据集作为操作需要在幕后继续,因为我正在工作的性质为我所雇用的公司工作。
所以,我的代码看起来像这样: 在表单中,我已在顶部声明(因为我需要从表单的其他部分访问它
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”并调用refreshlist sub我得到例外:
“DataTable已经属于另一个DataSet。”
正如您所看到的,从注释行开始,我尝试在重新添加之前删除该表,但没有运气。
我认为只需清理数据表,然后重新填充数据并重新绑定它就可以了,但我觉得我错过了某个地方,我希望它只是一个单行程或者最糟糕的是只需要几行代码。
非常感谢任何帮助,谢谢你的时间!
答案 0 :(得分:1)
发生此错误是因为DataTable'记住'它所属的数据集。将表添加到DataSet表属性时,将构建此关联。因此,如果您真的想要保持相同的DataTable并且想要将其添加到另一个DataSet,则首先需要从先前的DataSet中删除该表。
Dset = New DataSet()
Facility_Table.DataSet?.Tables.Remove(Facility_Table)
Dset.Tables.Add(Facility_Table)
答案 1 :(得分:0)
在尝试了各种交换和重置之后,上帝知道了什么,我最后回头看看我如何将数据表绑定到数据网格中,它像湿腌鱼一样在脸上拍打。
删除此批次:
Dim Dset As New DataSet()
'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()
并将其替换为:
DataGridView2.DataSource = Facility_Table
工作完成了。我现在要去睡觉了,脸上的k k。。