转自: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)
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);
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);
aDataRow.ItemArray = drItemPrices[i].ItemArray;
dtItemPrice.Rows.Add(aDataRow);
4、使用importRow的方法