XML來源:
/// <summary>
/// 模擬XML資料
/// </summary>
/// <returns></returns>
private DataTable GetDataTableXml()
{
string Xmlstring = @"<Datas>
<Data>
<ID>5</ID>
<來源>XML</來源>
</Data>
<Data>
<ID>6</ID>
<來源>XML</來源>
</Data>
<Data>
<ID>7</ID>
<來源>XML</來源>
</Data>
<Data>
<ID>8</ID>
<來源>XML</來源>
</Data>
</Datas>";
XmlDocument Xmldoc = new XmlDocument();
Xmldoc.LoadXml(Xmlstring);
XmlReader Xmlreader = XmlReader.Create(new System.IO.StringReader(Xmldoc.OuterXml));
DataSet ds = new DataSet();
ds.ReadXml(Xmlreader);
DataTable dt = ds.Tables[0];
return dt;
}
SQL來源
/// <summary>
/// 模擬SQL來源,建立假資料
/// </summary>
/// <returns></returns>
private DataTable GetDataTable()
{
DataTable dt = new DataTable();
dt.Columns.Add("ID");
dt.Columns.Add("來源");
for (int i = 0; i < 6; i++)
{
DataRow dr = dt.NewRow();
dr["ID"] = i;
dr["來源"] = "SQL Server";
dt.Rows.Add(dr);
}
return dt;
}
Merge使用方法
dt1 = GetDataTable();
gv_sql.DataSource = dt1;
gv_sql.DataBind();
dt2 = GetDataTableXml();
gv_xml.DataSource = dt2;
gv_xml.DataBind();
//如果不設Key的話,即使ID重複也會顯示兩筆
dt1.PrimaryKey = new DataColumn[] { dt1.Columns["ID"] };
dt2.PrimaryKey = new DataColumn[] { dt2.Columns["ID"] };
//如果有設Key,設true則保留dt1的資料;設false則保留dt2的資料
dt1.Merge(dt2, true);
gv_merge.DataSource = dt1;
gv_merge.DataBind();
Merge有幾個多載,我故意將兩個資料來源都存在ID為 5 的資料,如果不設Key則就會顯示兩筆ID為5的資料,如設定為true則會保留主表的資料(dt1),false則反之。
結果:
--
Reference
http://msdn.microsoft.com/zh-tw/library/system.data.datatable.merge.aspx
http://haoxiaoittoo.blogspot.tw/2011/07/datatable.html
沒有留言:
張貼留言