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

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

转载于:https://www.cnblogs.com/lhyqzx/p/5923030.html

DataTable.DataRow的复制相关推荐

  1. DataSet DataTable DataRow

    DataSet 表示数据在内存中的缓存. 属性 Tables  获取包含在 DataSet 中的表的集合. ds.Tables["sjxx"] DataTable 表示内存中数据的 ...

  2. java datarow_DataSet DataTable DataRow 深入浅出

    本篇文章适合有一定的基础的人去查看 ,最好学习过一定net 编程基础在来查看此文章. 1.概念 DataSet是ADO.NET的中心概念.可以把DataSet当成内存中的数据库,DataSet是不依赖 ...

  3. datatable DataRow

    foreach (DataRow dr in dt.Rows) { ss = ss + dr["活动名称"].ToString() + ","; } 转载于:h ...

  4. Dataset/Datatable/Datarow转Json的一种方法

    //以下三句為轉Dataset/Datatable為Json格式的一般方法. System.Web.Script.Serialization.JavaScriptSerializer serial = ...

  5. 表达式计算 DataTable/DataRow/DataColumn Expression、JScript CodeDomProvider Eval

  6. 两个datatable之间的复制

    table1=table.Clone()     for(int   i=0;i<table.Rows.Count;i++)         table1.ImportRow(table.Row ...

  7. DataRow复制一行到另一个DataTable

    DataRow复制一行到另一个DataTable 下面两个方法是DataRow复制一行到另一个DataTable的,直接Add会出错"此行已属于另一个表",其实以前就知道怎么做的, ...

  8. C# DataRow数组转换为DataTable

    public DataTable ToDataTable(DataRow[] rows) { if (rows == null || rows.Length == 0) return null; Da ...

  9. C# DataRow转DataTable

    DataTable dta101 = new DataTable(); DataRow[] drz = dt.Select("MOVE_TYPE='101'");//生成DataR ...

最新文章

  1. 坐姿绳索划船 - 坐姿器械划船动作图解教程
  2. Java 的Comparator比较器用法
  3. migration mysql_MySql 使用 EF Core 2.0 CodeFirst、DbFirst、数据库迁移(Migration)介绍及示例...
  4. 数学 —— 巧用进制
  5. 说一个闭包在实际开发中的应用
  6. 中国拟修订保守国家秘密法 严防通过互联网泄密
  7. TypeScript 官方决定全面采用 ESLint
  8. 10.TCP/IP 详解卷1 --- 动态选路协议
  9. SOME/IP不等同于SOA,CommonAPI-RPC通信和vsomeip基于消息通信
  10. 华为数通网络自动化开发学习笔记
  11. Import REC修复的时候找不到被调试程序进程
  12. android webp格式的图片,Android使用webp格式图片的步骤
  13. vue实现更换背景图片_vue动态设置style属性修改背景图片
  14. 微信每天处理2.05亿通话 运营商只剩卖流量
  15. Kotlin项目实战之手机影音---悦单条目实现及BaseListFragment抽取
  16. 力扣 26.删除有序数组中的重复项
  17. MusicLibrary:一个丰富的音乐播放封装库
  18. listview增大条目间距
  19. study mysql
  20. 《2022爱分析·营销服一体化实践报告》发布:营销服一体化重塑企业增长新链路

热门文章

  1. 设计模式之享元模式学习笔记
  2. Flutter开发之WebView加载网页(24)
  3. swift_046(Swift map,filter, reduce方法)
  4. 一张图搞定iOS学习路线
  5. 用jk触发器构成二分频电路_实例分析,轻松掌握声控照明电路
  6. codeforces392B
  7. mysql命令使用2
  8. Netty之WebSocket和四种IO介绍
  9. python mysql索引 优化神器explain 慢查询
  10. Fiddler抓取https的设置