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

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的复制的更多相关文章

  1. DataSet & DataTable &DataRow 深入浅出

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

  2. DataTable DataRow DataColumn DataSet

    1.DataTable 数据表(内存) 2.DataRow DataTable 的行 3.DataColumn DataTable 的列 4.DataSet 内存中的缓存

  3. DataSet - DataTable - DataRow 读取 xml 文件 + 搜索

    DataSet ds = XmlHelper.GetDataSetByXml(AppDomain.CurrentDomain.BaseDirectory + "/Config/ConfigN ...

  4. C# WinForm:DataTable中数据复制粘贴操作的实现

    1. 需要实现类似于Excel的功能,就是在任意位置选中鼠标起点和终点所连对角线所在的矩形,进行复制粘贴. 2. 要实现这个功能,首先需要获取鼠标起点和终点点击的位置. 3. 所以通过GridView ...

  5. Redis 通用方法 存储DataTable DataRow DataSet

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  6. datatable dataRow

    DataRow[] Drs = DtStockProduct.Select(Condition11); DtResult = DtStockProduct.Clone(); datatble tabl ...

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

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

  8. 【转】DataRow复制一行到另一个DataTable

     源地址:http://www.cnblogs.com/pains/archive/2007/11/22/969003.html   下面两个方法是DataRow复制一行到另一个DataTable的, ...

  9. 如何复制DataRow(dataTabel中的行)

    由于需要对dataTabel中的行进行上移和下移操作: row 1      行号0 row2       行号1 row3       行号2 例如将row3上移一行,即row2和row3对调位置. ...

随机推荐

  1. linux通过history查看命令执行时间

    Linux的bash内部命令history就可以显示命令行的命令历史,默认环境执行 history 命令后,通常只会显示已执行命令的序号和命令本身.如果想要查看命令历史的时间戳,那么可以执行:# ex ...

  2. 看详细的tomcat报错信息

    WEB-INF/classes目录下新建一个文件叫logging.properties handlers = org.apache.juli.FileHandler, java.util.loggin ...

  3. JSP内置对象--pageContext对象(非常重要!!!)

    pageContext对象是javax.servlet.jsp.PageContext类的实例,只要表示的是一个jsp页面的上下文,而且功能强大,几乎可以操作各种内置对象. >forward(S ...

  4. System.Text.RegularExpressions.Regex

    System.Text.RegularExpressions.Regex.IsMatch(string) 是否在指定字符串中找到制定项 System.Text.RegularExpressions.R ...

  5. Cisco 绑定mac地址

    在Cisco中有以下三种方案可供选择,方案1和方案2实现的功能是一样的,即在具体的交换机端口上绑定特定的主机的MAC地址(网卡硬件地址),方案3是在具体的交换机端口上同时绑定特定的主机的MAC地址(网 ...

  6. CSS代码格式化工具

    CSS代码格式化工具 http://tool.lanrentuku.com/cssformat/ 可实现CSS代码格式化和CSS在线压缩 请将CSS代码复制到下面表单中:    

  7. Android EditText的设置(转)

    1.输入法Enter键图标的设置: 软件盘的界面替换只有一个属性android:imeOptions,这个属性的可以取的值有normal,actionUnspecified,actionNone,ac ...

  8. 4个特殊ping

    当你的网络出现故障或无法连通时,如何才能简单高效的找出故障?其实只需要一个ping命令,就可以判断TCP/IP协议故障…… 1.Ping 127.0.0.1: 127.0.0.1是本地循环地址,如果本 ...

  9. libevent和libev的区别对比(二)

    之前有一篇文章描述过一些对比: http://www.cnblogs.com/charlesblc/p/6078029.html 这里在代码和应用方面再说一下. 看一下两边的Helloworld基本就 ...

  10. XML简单的增改删操作

    XML文件的简单增改删,每一个都可以单独拿出来使用. 新创建XML文件,<?xmlversion="1.0"encoding="utf-8"?> & ...