{
//合并列
DataTable ndt1 = dt1.Copy();
DataTable ndt2 = dt2.Copy();
ndt1.PrimaryKey = new DataColumn[] { ndt1.Columns[KeyColName] };
ndt2.PrimaryKey = new DataColumn[] { ndt2.Columns[KeyColName] };
for (int i = 0; i < ndt2.Columns.Count; i++)
{
if (ndt2.Columns[i].ColumnName.ToLower().Trim() != KeyColName.ToLower().Trim())
{
ndt1.Columns.Add(ndt2.Columns[i].ColumnName);
}
}
//合并相同主键的数据
for (int i = 0; i < ndt1.Rows.Count; i++)
{
DataRow inrow = ndt2.Rows.Find(ndt1.Rows[i][KeyColName]);
if (inrow != null)
{
for (int j = 0; j < ndt2.Columns.Count; j++)
{
if (ndt2.Columns[j].ColumnName.ToLower().Trim() != KeyColName.ToLower().Trim())
{
ndt1.Rows[i][ndt2.Columns[j].ColumnName] = inrow[ndt2.Columns[j].ColumnName];
}
}
ndt2.Rows.Remove(inrow);
}
}
//合并不同主键的数据
for (int i = 0; i < ndt2.Rows.Count; i++)
{
DataRow row = ndt1.NewRow();
for (int j = 0; j < ndt2.Columns.Count; j++)
{
row[ndt2.Columns[j].ColumnName] = ndt2.Rows[i][ndt2.Columns[j].ColumnName];
}
ndt1.Rows.Add(row);
}
return ndt1;
}
//调用测试
protected void creatDataTable()
{
//第一步 先初始化数据
DataTable dtA = new DataTable();
dtA.Columns.Add("id", typeof(int));
dtA.Columns.Add("name", typeof(string));
dtA.Rows.Add(1, "a");
dtA.Rows.Add(2, "b");
dtA.Rows.Add(3, "c");
dtA.Rows.Add(4, "d");
DataTable dtB = new DataTable();
dtB.Columns.Add("id", typeof(int));
dtB.Columns.Add("name2", typeof(string));
dtB.Rows.Add(1, "a");
dtB.Rows.Add(2, "d");
dtB.Rows.Add(4, "f");
DataTable drt= MergeDataTable(dtA, dtB, "id");
}