柚子Nan--回归原点

Everything can be as easy as you like or as complex as you need.
posts - 232, comments - 984, trackbacks - 17, articles - 29
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

最近项目太忙了,几乎没有时间来光顾这里了
在项目中除了负责自己的模块实现外,还做了一个不太称职的
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 都有复制的方法了

Feedback

#1楼    回复  引用    

2004-07-08 12:31 by zhaixd [未注册用户]
在确保表结构相同的情况下,有只需要一行的更为简单的方法:
如下面所示:
DataRow aDataRow = dtItemPrice.NewRow();

aDataRow.ItemArray = drItemPrices[i].ItemArray;

dtItemPrice.Rows.Add(aDataRow);

#2楼    回复  引用  查看    

2004-07-08 13:20 by 柚子nan      
呵呵,不错。
你的方法更强!

#3楼    回复  引用    

2004-07-08 13:47 by Knight [未注册用户]
还有一个叫做importRow的方法吧,可以使用,更加方便!

#4楼    回复  引用    

2007-04-10 14:02 by AllenKOO [未注册用户]
恩..出了一个小错误
foreach(DataColumn aDataColumn in dtItemPrice.Columns)
{
aDataRow[aDataColumn.ColumnName] = drItemPrices[i][aDataColumn.ColumnName];
}

drItemPrices[i][aDataColumn.ColumnName];
改成drItemPrices.Rows[i][aDataColumn.ColumnName];
写得很好..

#5楼    回复  引用    

2007-04-10 14:07 by AllenKOO [未注册用户]
DataRow dr = temp.NewRow();
for ( int i = 0; i < PageSize; i++)
{
foreach(DataColumn aDataColumn in Deal.Columns)
{
dr[aDataColumn.ColumnName] = Deal.Rows[i][aDataColumn.ColumnName];
}
temp.Rows.Add(dr);
}
这样的写法我看和你的一样啊
但是一样报错
此行已属于另一个表

#6楼    回复  引用    

2007-05-21 17:07 by Lsary [未注册用户]
@AllenKOO

把DataRow dr = temp.NewRow(); 这句放在 for 里面就可以了



标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2004-07-08 13:49 编辑过
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索


相关链接: