1. 程式人生 > >DataTable.DataRow的複製(解決:此行已屬於另一個表)

DataTable.DataRow的複製(解決:此行已屬於另一個表)

經常遇到這種錯誤,“此行已屬於另一個表”的錯誤,導致這個錯誤的語句如下:

dtPriceTable.Rows.InsertAt(aDataRow,i);

或者

dtPriceTable.Rows.Add(aDataRow);

我分析了一下原因,因為DataRow DataTable 都是傳引用呼叫的。所以一個行在一個表中了,就不能再增加到另外一個表。

具體的改善策略有兩種:

1、   把原始DataRow的每列依次賦值。如下:

DataRow tempRow = dtItemPrice.NewRow();

tempRow [
"First"= aDataRow ["First "]
tempRow [
"second"= aDataRow ["second "]
tempRow [
"third"= aDataRow ["third "]
tempRow [
"forth"= aDataRow ["forth "]
tempRow [
"Fifth"= aDataRow ["Fifth "]
…… 

dtPriceTable.Rows.Add(tempRow)

2、 迴圈DataTable的每列。如下:

DataRow aDataRow = dtItemPrice.NewRow();

foreach(DataColumn aDataColumn in dtItemPrice.Columns)
{
    aDataRow[aDataColumn.ColumnName] 
= drItemPrices[i][aDataColumn.ColumnName];
}


InsertConditionType(aDataRow,dtItemPrice); 

測試就可以了。

3、在表結構相同的情況下,如下面所示: 

DataRow aDataRow = dtItemPrice.NewRow(); 
aDataRow.ItemArray 
= drItemPrices[i].ItemArray; 
dtItemPrice.Rows.Add(aDataRow);

4、使用importRow的方法