C#復(fù)制DataRow出現(xiàn)“該行已經(jīng)屬于此表”錯(cuò)誤的解決辦法(轉(zhuǎn))
C#復(fù)制DataRow出現(xiàn)“該行已經(jīng)屬于此表”錯(cuò)誤的解決辦法
DataTable dt = new DataTable(); dr=所要添加到dt的DataRow。 dt.Rows.Add(dr[); //出錯(cuò)提示為:該行已經(jīng)屬于另一個(gè)表
最近項(xiàng)目太忙了,幾乎沒有時(shí)間來光顧這里了
。
在項(xiàng)目中除了負(fù)責(zé)自己的模塊實(shí)現(xiàn)外,還做了一個(gè)不太稱職的TeamLeader。
由于負(fù)責(zé)的模塊很多數(shù)據(jù)的操作,經(jīng)常遇到這種錯(cuò)誤,“此行已屬于另一個(gè)表”的錯(cuò)誤。
導(dǎo)致這個(gè)錯(cuò)誤的語句如下:
dtPriceTable.Rows.InsertAt(aDataRow,i);
或者
dtPriceTable.Rows.Add(aDataRow);
我分析了一下原因,因?yàn)?/span>DataRow DataTable 都是傳引用調(diào)用的。所以一個(gè)行在一個(gè)表中了,就不能再增加到另外一個(gè)表。
具體的改善策略有兩種:
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、 有個(gè)同事提醒我為什么不循環(huán)DataTable的每個(gè)列呢?我想是哦,為什么不呢!
呵呵,這樣子,不管Table有多少列,只需要3句話就搞定了
DataRow aDataRow = dtItemPrice.NewRow();
foreach(DataColumn aDataColumn in dtItemPrice.Columns)
{
aDataRow[aDataColumn.ColumnName] = drItemPrices[i][aDataColumn.ColumnName];
}
InsertConditionType(aDataRow,dtItemPrice);
測試就可以了。
后來看了看DataSet 和 DataTable 都有一個(gè)方法:Copy(),復(fù)制該 System.Data.DataTable 的結(jié)構(gòu)和數(shù)據(jù)。
那么結(jié)合這個(gè)函數(shù),無論是DataSet 和 DataTable還是DataRow 都有復(fù)制的方法了。
浙公網(wǎng)安備 33010602011771號