+++ 本例演示如何使用DataTable.Merge()
protected void Page_Load(object sender, EventArgs e)
{
#region 表1
DataTable table1 = new DataTable("Items");
DataColumn idColumn = new DataColumn("id", typeof(System.Int32));
DataColumn itemColumn = new DataColumn("item", typeof(System.Int32));
table1.Columns.Add(idColumn);
table1.Columns.Add(itemColumn);
table1.PrimaryKey = new DataColumn[] { idColumn };
table1.RowChanged += new System.Data.DataRowChangeEventHandler(Row_Changed);
DataRow row;
for (int i = 0; i <= 9; i++)
{
row = table1.NewRow();
row["id"] = i;
row["item"] = i;
table1.Rows.Add(row);
}
table1.AcceptChanges();
PrintValues(table1, "Original values");
#endregion
#region 表2
DataTable table2 = table1.Clone();
table2.Columns.Add("newColumn", typeof(System.String));
row = table2.NewRow();
row["id"] = 14;
row["item"] = 774;
row["newColumn"] = "new column 1";
table2.Rows.Add(row);
row = table2.NewRow();
row["id"] = 12;
row["item"] = 555;
row["newColumn"] = "new column 2";
table2.Rows.Add(row);
row = table2.NewRow();
row["id"] = 13;
row["item"] = 665;
row["newColumn"] = "new column 3";
table2.Rows.Add(row);
#endregion
Response.Write("Merging");
table1.Merge(table2, false, MissingSchemaAction.Add);
PrintValues(table1, "Merged With table1, schema added");
}
public void Row_Changed(object sender, DataRowChangeEventArgs e)
{
Response.Write("Row changed " + e.Action + " " + e.Row.ItemArray[0] + "</br>");
}
public void PrintValues(DataTable table, string label)
{
Response.Write(label);
foreach (DataRow row in table.Rows)
{
foreach (DataColumn col in table.Columns)
{
Response.Write(row[col].ToString() + " ");
}
}
}
+++ 说明
1) 创建表1,利用表1创建表2,并向表2中增加一列,此时表1和表2的表结构不同;
2) 利用MissingSchemaAction.Add将表1和表2合并;
3) DataTable.Merge方法将指定的DataTable与当前的DataTable合并,该方法有三个重载函数:
Merge(DataTable) 将指定的DataTable与当前的DataTable合并。
Merge(DataTable, Boolean) 将指定的DataTable与当前的DataTable合并,指示是否在当前的DataTable中保留更改。
Merge(DataTable, Boolean, MissingSchemaAction) 将指定的DataTable与当前的DataTable合并,指示是否在当前的DataTable中保留更改以及如何处理缺失的架构。
4) 合并通常是在客户端应用程序上将数据源中最近的更改合并到现有的DataTable中,使客户端应用程序能够拥有用数据源中的最新数据刷新的DataTable。