多个DataTable表该如何进行合并?
解析如下:
相同结构的表:
使用Rows.Add && ItemArray
//使用Rows.Add&&ItemArray 相同表结构 -> 添加数据
private static DataTable NewItemArray(DataTable dt1, DataTable dt2)
{
//添加两表结构 -- 相同表结构添加数据 --
DataTable newtable = dt1.Clone();//新表添加表1结构
newtable.Columns.Add(dt2.Columns[0].ColumnName);//添加表二结构
newtable.Columns.Add(dt2.Columns[1].ColumnName);
object[] value = new object[newtable.Columns.Count];
for (int i = 0; i < value.Length / 2; i++)
{
//新表添加一行数据,一行数据包括两个表数据的合并
dt1.Rows[i].ItemArray.CopyTo(value, 0);
dt2.Rows[i].ItemArray.CopyTo(value, 2);
newtable.Rows.Add(value);
//ItemArrayd把行添加到数组中参数(数组,指定添加索引开始)
}
return newtable;
}
//两个相同结构的表
private static void NewTable(DataTable dt1, DataTable dt2)
{
dt1.Columns.Add("姓名");
dt1.Columns.Add("性别");
dt1.Rows.Add("张三", "男");
dt1.Rows.Add("李四", "男");
dt2.Columns.Add("姓名1");
dt2.Columns.Add("性别1");
dt2.Rows.Add("小红", "女");
dt2.Rows.Add("小德", "女");
}
#endregion
两个不相同结构的表:
两个表结构不相同时,先创建一个新的表,接着添加第一个表结构,在添加第二个表的结构。(如果有多个表,则按自己需要的列名称顺序添加)最后在给新表导入数据。
使用Rows.Add && ItemArray
#region 不相同结构的表合并
//两个不相同结构的表
private static void NewTable2(DataTable dt3, DataTable dt4)
{
dt3.Columns.Add("姓名");
dt3.Columns.Add("性别");
dt4.Columns.Add("年龄");
dt4.Columns.Add("职业");
dt4.Columns.Add("工资");
dt3.Rows.Add("张三", "男");
dt3.Rows.Add("李四", "男");
dt3.Rows.Add("王丽", "女");
dt4.Rows.Add("25", "工程师", "5000+");
dt4.Rows.Add("28", "快递员", "3000+");
dt4.Rows.Add("27", "白领", "4000+");
}
//使用Rows.Add && ItemArray 不相同表结构 -> 添加数据
//不相同表结构添加数据
private DataTable NewItemArray2(DataTable dt3, DataTable dt4)
{
#region 方法一
//表1结构添加到新表
DataTable newtable = dt3.Clone();
//表2结构添加到新表
for (int i = 0; i < dt4.Columns.Count; i++)
{
newtable.Columns.Add(dt4.Columns[i].ColumnName);
}
//给新表添数据
int count = 0;
object[] value = new object[newtable.Columns.Count];
if (dt3.Rows.Count > dt4.Rows.Count)
{
count = dt3.Rows.Count;
}
else
{
count = dt4.Rows.Count;
}
for (int i = 0; i < count; i++)
{
dt3.Rows[i].ItemArray.CopyTo(value, 0);
dt4.Rows[i].ItemArray.CopyTo(value, dt3.Rows.Count - 1);
newtable.Rows.Add(value);
}
#endregion
return newtable;
}
#endregion