重用数据表或我是以错误的方式...:DataTable已经属于另一个DataSet

问题描述 投票:2回答:2

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。”

正如你所看到的,从注释行开始,我已经尝试在重新添加之前删除表,但没有运气。

我认为只是清理数据表,然后重新填充它并重新绑定它将是所有需要但我有一种感觉,我错过了某个地方的一步,我希望它只是一个班轮或最坏的只需几行代码。

任何帮助将非常感谢,谢谢你的时间!

vb.net datatable bind programmatically
2个回答
1
投票

发生此错误是因为DataTable'记住'它所属的数据集。将表添加到DataSet表属性时,将构建此关联。因此,如果您真的想要保持相同的DataTable并且想要将其添加到另一个DataSet,则首先需要从先前的DataSet中删除该表。

Dset = New DataSet()
Facility_Table.DataSet?.Tables.Remove(Facility_Table)
Dset.Tables.Add(Facility_Table)

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 hu

© www.soinside.com 2019 - 2024. All rights reserved.