Dataable的复制,合并操作(不想废话,直接进入正题)
方法1
//创建一个新的表 复制表1的数据结构 DataTable dt = DataTable1.Clone(); object[] obj = new object[dt.Columns.Count]; //添加表1的数据 for (int i = 0; i < DataTable1.Rows.Count; i++) { DataTable1.Rows[i].ItemArray.CopyTo(obj, 0); dt.Rows.Add(obj); } //添加表2的数据 for (int i = 0; i < DataTable2.Rows.Count; i++) { DataTable2.Rows[i].ItemArray.CopyTo(obj, 0); dt.Rows.Add(obj); }
方法2:ImportRow()方法
//拷贝DataTable1的结构和数据 //到dt中 DataTable dt= DataTable1.Copy(); //把DataTable1的数据往newDataTable 表中添加 foreach (DataRow dr in DataTable1.Rows) { dt.ImportRow(dr); }
两张结构不同相同的情况
先复制表结构,将一张表结构直接复制到新表中,第二张表的做循环往新表中做添加列的操作
//先复制表1的结构 DataTable dt =dt1.Clone(); //复制表2的结构 for(int i=0;i<dt2.Columns.Count; i++) { //对表2做循环,得到表2的列,往声明的dt中做添加列的操作 dt.Columns.Add(dt2.Columns[i].ColumnName); }
在复制数据的时候,需要注意的是合并表的行、列的操作
DataTable dt1 = new DataTable(); dt1.Columns.Add("name"); dt1.Rows.Add("三毛"); DataTable dt2 = new DataTable(); dt2.Columns.Add("id"); dt2.Columns.Add("sex"); dt2.Rows.Add("1"); dt2.Rows[0]["sex"] = "xx"; dt2.Rows.Add("2", "aa"); DataTable dt = dt1.Clone(); for (int i = 0; i < dt2.Columns.Count; i++) { dt.Columns.Add(dt2.Columns[i].ColumnName); } //在赋值的时候,需要先知道datatbale列数量的情况 var dt1c = dt1.Columns.Count; var dt2c = dt2.Columns.Count; //在循环赋值时将第一个datatable值写入后 //两个datable的count会有四种情况
//行:表1比表2多; 表1比表2少
//列:表1比表2多;表1比表2少 int RowCount = dt1.Rows.Count > dt2.Rows.Count ? dt1.Rows.Count : dt2.Rows.Count; var sentry = dt1c > dt2c;//定义一个哨兵控制列的逻辑 for (int i = 0; i < RowCount; i++) { object[] value = new object[dt.Columns.Count]; if (dt1.Rows.Count >= i + 1) { dt1.Rows[i].ItemArray.CopyTo(value, 0); } if (dt2.Rows.Count >= i + 1) { if (sentry) { dt2.Rows[i].ItemArray.CopyTo(value, dt1.Columns.Count - 1 > 0 ? 1 : dt1.Columns.Count - 1); } else { dt2.Rows[i].ItemArray.CopyTo(value, dt1.Columns.Count); } } dt.Rows.Add(value); }