zoukankan      html  css  js  c++  java
  • 如何复制DataRow(dataTabel中的行)

    由于需要对dataTabel中的行进行上移和下移操作:

    row 1      行号0

    row2       行号1

    row3       行号2

    例如将row3上移一行,即row2和row3对调位置。

    思路:将row3复制出来,删除row3,在第二行插入row3。

    复制row3的方法是: DataRow DR1 = dataTabel.Rows[2];

    删除row3:dataTabel.Rows.RemoveAt(2);     //此行将DR1 的内容给删除了

    将DR1插入第二行:DT1.Rows.InsertAt(DR1, 2-1);      //插入的是空行

    所以上述操作无法完成任务,原因就是DataRow 是引用类型,你删除目标行时,你意图复制的行内容也被删除了。

    另想办法,新建一个dataTabel2,然后把行复制到新表,再将dataTabel2的行插入到dataTabel。

    还是不行,插入时,提示行已存在于另一个dataTabel,不能插入。想想也是,如果能插入,dataTabel2不就少了一行,结构不就被破坏了嘛。

    复制行的方法:

    DataTabel dataTabel2= dataTabel.clone();//必须先复制表的架构,使具有相同的的列或关系!

     DataRow DR2 =dataTabel2 . NewRow();

    DR2.ItemArray = DR1.ItemArray;

    既然不能将其他表的行插入本表,只能想着从本表新建一行,然后插入到相应位置了。于是,问题解决了。一波三折,特记录之。

                //将要上移的行
                    DataRow DR1 = DT1.Rows[intCurrentRow];
                    
                    //在当前表中创建一个新行,并把要移动的行的内容复制到新行
                    DataRow DR2 = DT1.NewRow();
                    DR2.ItemArray = DR1.ItemArray;
    
                    //开始移动,删除要上移的行,再将新行插入到原位置的上一行
                    DT1.Rows.RemoveAt(intCurrentRow);
                    DT1.Rows.InsertAt(DR2, intCurrentRow-1);                
    

      

    借鉴以下思想:

    DataRow复制一行到另一个DataTable

     http://www.cnblogs.com/pains/archive/2007/11/22/969003.html
     
    下面两个方法是DataRow复制一行到另一个DataTable的,直接Add会出错“此行已属于另一个表”,其实以前就知道怎么做的,可每次要用到的时候还是犯糊涂,这次把它们记下来。
    1.用DataRow.ItemArray
    DataTable t=new DataTable();
    DataRow r=t.NewRow();
    r.ItemArray=oldRow.ItemArray;
    t.Rows.Add(r);

    2.用DataTable.ImportRow()
    t.ImportRow(oldRow);
  • 相关阅读:
    【CF932E】Team Work
    【ZJOI2011】看电影
    【CQOI2011】放棋子
    【HAOI2010】计数
    【HNOI2009】有趣的数列
    【ZJOI2010】排列计数
    【FJOI2016】建筑师
    【USACO10 OPEN】三角形计数
    【HNOI2012】排队
    【HNOI2008】越狱
  • 原文地址:https://www.cnblogs.com/huangfr/p/4289553.html
Copyright © 2011-2022 走看看