由于需要对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);