zoukankan      html  css  js  c++  java
  • 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);
                                }
                            }
    复制代码
  • 相关阅读:
    JAVA基础集合(二)
    JAVA基础XML的解析
    JAVA基础集合(一)
    JAVA基础网络编程
    JAVA基础File类
    JAVA基础IO流(二)
    JAVA基础JDBC二(常用的开源工具)
    JAVA基础异常
    JAVA基础JDBC(一)
    JAVA基础反射
  • 原文地址:https://www.cnblogs.com/lhyqzx/p/5923030.html
Copyright © 2011-2022 走看看