• DataTable.DataRow的复制


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

    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);
                                }
                            }
    复制代码
  • 相关阅读:
    Spark技术内幕:Stage划分及提交源代码分析
    从中国制造到中国智造,奥克斯怎样独当一面?
    Spring 类构造器初始化实例
    国庆遐想:漫步云计算数据中心
    osx下快捷键相应符号
    【LuTy推荐】Samba for Android轻松无线访问手机存储,Android安卓软件下载
    WiFi共享精灵官网_笔记本变无线路由器,手机免费wlan上网软件
    vector中的find
    redis web cli nb
    Redis:安装、配置、操作和简单代码实例(C语言Client端)
  • 原文地址:https://www.cnblogs.com/lhyqzx/p/5923030.html
Copyright © 2020-2023  润新知