出處: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; | 
 
11 | dt1.PrimaryKey = new DataColumn[] { dt1.Columns["ID"] }; | 
 
12 | dt2.PrimaryKey = new DataColumn[] { dt2.Columns["ID"] }; | 
 
17 | gv_merge.DataSource = dt1; | 
 
 
 
Merge有幾個多載,我故意將兩個資料來源都存在ID為 5 的資料,如果不設Key則就會顯示兩筆ID為5的資料,如設定為true則會保留主表的資料(dt1),false則反之。
 
結果:
--
 
沒有留言:
張貼留言