[转]将dataTable里的一行赋值给另外一个DataTable

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

 

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);

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/mallva/archive/2007/12/06/1921102.aspx

posted @ 2009-07-04 16:31  愚蠢的笨蛋  阅读(2479)  评论(0编辑  收藏  举报