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);
}