DataTable已经属于另一个DataSet
在将数据集中的一个数据集添加到另一个数据集时发生此错误。“DataTable已经属于另一个DataSet”。
dsformulaValues.Tables.Add(m_DataAccess.GetFormulaValues (dv.ToTable.DefaultView.ToTable(False, strSelectedCols)).Tables(0))
就像其他响应指出的那样,你看到的错误是因为你试图添加到DataSet的DataTable已经是不同DataSet的一部分。
一种解决scheme是复制 DataTable并将副本分配给另一个DataSet。
dtCopy = dataTable.Copy() ds.Tables.Add(dtCopy)
复制的DataTable将具有复制的DataTable的结构和数据。
如果您只想要DataTable的结构,请调用Clone 。
dtCopy = dataTable.Clone()
被接受的答案不是很好。 克隆应该永远是最后的select。
这是解决问题的一种方法,不会产生克隆的开销。
DataSet ds = GetData1(); DataSet ds2 = GetData2(); //Assuming you know you've got good data DataTable dt = ds2.Tables[0]; ds2.Tables.Remove(dt); dt.TableName = "PortedTable";//you may need to change the table name to prevent conflicts ds.Tables.Add(dt);
尝试调用这个方法:
DataTable dt = dv.ToTable.DefaultView.ToTable(False, strSelectedCols)).Tables(0).Clone()
这将创build一个DataTable
的副本并将其分配给目标DataSet
:
ds.Tables.Add(dt)
我猜这意味着DataTable属于另一个DataSet …
您可以将DataTable序列化为XML,然后将其反序列化到您的目标DataSet中。
我想你应该创build一个新的DataTable,并将结构和数据导入到新的。
如果它不是一个types化的数据集,请尝试使用DataTable.Copy()方法复制表。 此方法创build同一个表的新实例,因此它不属于任何DataSet:
昏暗的新表作为DataTable = oldTable.Copy()昏暗的DV作为DataView = newTable.DefaultView
dsformulaValues.Tables.Add(m_DataAccess.GetFormulaValues(dv.ToTable.DefaultView.ToTable(False,strSelectedCols))。Tables(0))
我有同样的问题,我解决了它使用Remove
。 在我看来, 你的代码可能是这样的:
dsformulaValues.Tables.Add(m_DataAccess.GetFormulaValues (dv.ToTable.DefaultView.ToTable(False, strSelectedCols)).Tables(0)) dsformulaValues.Tables.Remove(//I'm not sure to understand your code, so read this code line as only an input for your stuff. Please, consider my code below for more understanding.
我的工作代码是这样的:
DataTable myTable = new DataTable(); private void Save() { DataSet myDataSet = new DataSet(); myDataSet.Tables.Add(myTable); myDataSet.Tables.Remove(myTable);//This works myDataSet.WriteXml("myTable.xml"); } private void buttonSave_Click(object sender, EventArgs e) { Save(); }
每次我点击buttonSave
button,就会出现“DataTable已经属于另一个DataSet”的消息,写完行代码myDataSet.Tables.Remove(myTable);//This works
程序开始运行,没有问题,现在我可以点击button多次,而不会丢失myTable
的值,也不会显示错误消息。
我希望这可以帮助。
我发现一个转身,我希望它可以帮助
_DataTable.TableName = _TableName If _DataTable.DataSet IsNot Nothing Then _DataSet = _DataTable.DataSet Else _DataSet = New DataSet _DataSet.Tables.Add(_DataTable) End If
不知何故,即使_DataTable是新的,但是如果它引用了一个先前加载的物理表,那么DataTable就会inheritance前面的configuration。
简单的方法就是将表格合并如下。
dsformulaValues.Merge(m_DataAccess.GetFormulaValues(dv.ToTable.DefaultView.ToTable(False, strSelectedCols)).Tables(0))