出處:
http://www.dotblogs.com.tw/kyleshen/archive/2013/10/22/125028.aspx
有時我們會有多個結構一樣但來源不同的資料,需要顯示在一個Grid裡面,這時我們就能用DataTable的Merge() 函數來實現,以我實務遇到的情況,大概就是一個DataTable資料來源為某個XML檔,而另外一個來源為DB(當然如果都是存在於DB,就可以直接用Join的方式來實現),以下就示範這兩種資料來源怎麼合併:
XML來源:
04 |
/// <returns></returns> |
05 |
private DataTable GetDataTableXml() |
07 |
string Xmlstring = @"<Datas> |
25 |
XmlDocument Xmldoc = new XmlDocument(); |
26 |
Xmldoc.LoadXml(Xmlstring); |
27 |
XmlReader Xmlreader = XmlReader.Create( new System.IO.StringReader(Xmldoc.OuterXml)); |
28 |
DataSet ds = new DataSet(); |
29 |
ds.ReadXml(Xmlreader); |
30 |
DataTable dt = ds.Tables[0]; |
SQL來源
04 |
/// <returns></returns> |
05 |
private DataTable GetDataTable() |
07 |
DataTable dt = new DataTable(); |
11 |
for ( int i = 0; i < 6; i++) |
13 |
DataRow dr = dt.NewRow(); |
15 |
dr[ "來源" ] = "SQL Server" ; |
Merge使用方法
02 |
gv_sql.DataSource = dt1; |
06 |
dt2 = GetDataTableXml(); |
07 |
gv_xml.DataSource = dt2; |
10 |
//如果不設Key的話,即使ID重複也會顯示兩筆 |
11 |
dt1.PrimaryKey = new DataColumn[] { dt1.Columns[ "ID" ] }; |
12 |
dt2.PrimaryKey = new DataColumn[] { dt2.Columns[ "ID" ] }; |
14 |
//如果有設Key,設true則保留dt1的資料;設false則保留dt2的資料 |
17 |
gv_merge.DataSource = dt1; |
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