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
沒有留言:
張貼留言