DataTable.DataRow的复制(解决:此行已属于另一个表)

来源:互联网 发布:java安装完怎么运行 编辑:程序博客网 时间:2024/05/22 21:16

转自:http://blog.csdn.net/mallva/article/details/1921102

经常遇到这种错误,“此行已属于另一个表”的错误,导致这个错误的语句如下:

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的方法


0 0