现在的位置: 首页 > 综合 > 正文

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

2013年10月06日 ⁄ 综合 ⁄ 共 871字 ⁄ 字号 评论关闭

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

抱歉!评论已关闭.