將數據集中的一個數據集添加到另一個數據集時發生此錯誤 「DataTable已屬於另一個DataSet」。DataTable已屬於另一個數據集
dsformulaValues.Tables.Add(m_DataAccess.GetFormulaValues
(dv.ToTable.DefaultView.ToTable(False, strSelectedCols)).Tables(0))
將數據集中的一個數據集添加到另一個數據集時發生此錯誤 「DataTable已屬於另一個DataSet」。DataTable已屬於另一個數據集
dsformulaValues.Tables.Add(m_DataAccess.GetFormulaValues
(dv.ToTable.DefaultView.ToTable(False, strSelectedCols)).Tables(0))
我想這意味着將DataTable屬於另一個數據集...
可以serialze數據表到XML,然後反序列化到目標數據集。
我想你應該創建一個新的DataTable並將結構和數據導入到新的DataTable中。
如果不是類型化數據集,請嘗試使用DataTable.Copy()方法複製表。這個方法創建了同桌的新實例,所以它不是要去屬於任何數據集:
暗淡newtable的作爲數據表= oldTable.Copy() 昏暗DV作爲數據視圖= newTable.DefaultView
dsformulaValues.Tables。 Add(m_DataAccess.GetFormulaValues(dv.ToTable.DefaultView.ToTable(False,strSelectedCols))。Tables(0))
接受的答案不是很好。克隆應始終是最後的選擇。
這是解決問題的一種方法,不會產生克隆開銷。
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);
我有同樣的問題,我用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
,消息「數據表已經屬於另一個數據集「出現後,編寫行代碼myDataSet.Tables.Remove(myTable);//This works
應用程序開始運行沒有問題,現在我可以多次點擊按鈕,而不會丟失值myTable
並沒有錯誤消息。
我希望這可以提供幫助。
對不起,'myDataSet.Tables.Remove(myTable); //這工作'行代碼(在我的代碼上面)必須在'myDataSet.WriteXml(「myTable.xml」)後''我確認代碼工作。 – GMarco1989 2015-09-18 10:28:42
我發現一個轉身,我希望它能夠幫助
_DataTable.TableName = _TableName
If _DataTable.DataSet IsNot Nothing Then
_DataSet = _DataTable.DataSet
Else
_DataSet = New DataSet
_DataSet.Tables.Add(_DataTable)
End If
不知怎的,即使是_DataTable新的,但如果它指的是以前的加載物理表就變成DataTable中繼承了以前的配置。
簡單的方法就是將表格合併如下。
dsformulaValues.Merge(m_DataAccess.GetFormulaValues(dv.ToTable.DefaultView.ToTable(False, strSelectedCols)).Tables(0))
你知道爲什麼會出現這種情況嗎?意義例如列表 myl =新列表();然後我添加3個項目,我做這個myl [0] = myl [1],這工作正常。我已經將myl [1]添加到列表中。問題是Datatable更通用的爲什麼以及如何檢查如果表已經屬於數據集 –
Dhananjay
2012-04-26 05:18:40
副本有很多開銷...請參閱Nathaniel Layton的答案以獲得更好的解決方案。 – Edyn 2013-09-13 20:28:38