首页 > 其他 > 详细

DataTable.DataRow的复制

时间:2020-11-26 11:23:15      阅读:25      评论:0      收藏:0      [点我收藏+]

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

技术分享图片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);

4、使用importRow的方法

 

常用方法 :

有两个表A和B,两表结构相同。现在需要将A表中部分行拷贝到B表中。
如果我们直接用 DataTableB.rows.add(dataTableA.rows[0]) 这样的方法式会报"row已经属于A表"这样的错误。
所以我们可以用另外的方法。
方法1,使用dataTable.ImportRow()方法。代码如下:

技术分享图片
技术分享图片
                        //得到A表中的部分行
                        DataRow[] drA = dtA.Select("aimtype=3");
                        //实例B
                        DataTable dtB = dtA.Clone();               
                        if (drA.Length > 0)
                        {
                            foreach (DataRow drVal in drA)
                            {
                                //向B中增加行
                                dtB.ImportRow(drVal);
                            }
                        }
技术分享图片
技术分享图片


方法2,使用DataTable.Rows.Add(params object[] values)方法,代码如下:

技术分享图片
技术分享图片
                        //得到A表中的部分行
                        DataRow[] drA = dtA.Select("aimtype=3");
                        //实例B
                        DataTable dtB = dtA.Clone();               
                        if (drA.Length > 0)
                        {
                            foreach (DataRow drVal in drA)
                            {
                                //向B中增加行
                                dtB.Rows.Add(drVal.ItemArray);
                            }
                        }
技术分享图片
技术分享图片

DataTable.DataRow的复制

原文:https://www.cnblogs.com/deepalley/p/14041052.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!