您的位置:首页 > 其它

DataSet,DataTable.DataRow复制方法——解决:此行已属于另一个表

2004-07-08 10:35 711 查看
最近项目太忙了,几乎没有时间来光顾这里了


在项目中除了负责自己的模块实现外,还做了一个不太称职的TeamLeader。

由于负责的模块很多数据的操作,经常遇到这种错误,“此行已属于另一个表”的错误。



导致这个错误的语句如下:

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的每个列呢?我想是哦,为什么不呢!

呵呵,这样子,不管Table有多少列,只需要3句话就搞定了

DataRow aDataRow = dtItemPrice.NewRow();

foreach(DataColumn aDataColumn in dtItemPrice.Columns)

{

aDataRow[aDataColumn.ColumnName] = drItemPrices[i][aDataColumn.ColumnName];

}

InsertConditionType(aDataRow,dtItemPrice);

测试就可以了。

后来看了看DataSet 和 DataTable 都有一个方法:Copy(),复制该 System.Data.DataTable 的结构和数据。

那么结合这个函数,无论是DataSet 和 DataTable还是DataRow 都有复制的方法了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: