2013年10月24日 星期四

[轉貼] 合併兩張DataTable資料

出處:http://www.dotblogs.com.tw/kyleshen/archive/2013/10/22/125028.aspx

有時我們會有多個結構一樣但來源不同的資料,需要顯示在一個Grid裡面,這時我們就能用DataTable的Merge() 函數來實現,以我實務遇到的情況,大概就是一個DataTable資料來源為某個XML檔,而另外一個來源為DB(當然如果都是存在於DB,就可以直接用Join的方式來實現),以下就示範這兩種資料來源怎麼合併:

XML來源:

01/// <summary>
02/// 模擬XML資料
03/// </summary>
04/// <returns></returns>
05private DataTable GetDataTableXml()
06{
07    string Xmlstring = @"<Datas>
08<Data>
09<ID>5</ID>
10<來源>XML</來源>
11</Data>
12<Data>
13<ID>6</ID>
14<來源>XML</來源>
15</Data>
16<Data>
17<ID>7</ID>
18<來源>XML</來源>
19</Data>
20<Data>
21<ID>8</ID>
22<來源>XML</來源>
23</Data>
24</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];
31    return dt;
32 
33}
image

SQL來源

01/// <summary>
02/// 模擬SQL來源,建立假資料
03/// </summary>
04/// <returns></returns>
05private DataTable GetDataTable()
06{
07    DataTable dt = new DataTable();
08    dt.Columns.Add("ID");
09    dt.Columns.Add("來源");
10 
11    for (int i = 0; i < 6; i++)
12    {
13        DataRow dr = dt.NewRow();
14        dr["ID"] = i;
15        dr["來源"] = "SQL Server";
16        dt.Rows.Add(dr);
17    }
18 
19    return dt;
20}
image



 

Merge使用方法

01dt1 = GetDataTable();
02gv_sql.DataSource = dt1;
03gv_sql.DataBind();
04 
05 
06dt2 = GetDataTableXml();
07gv_xml.DataSource = dt2;
08gv_xml.DataBind();
09 
10//如果不設Key的話,即使ID重複也會顯示兩筆
11dt1.PrimaryKey = new DataColumn[] { dt1.Columns["ID"] };
12dt2.PrimaryKey = new DataColumn[] { dt2.Columns["ID"] };
13 
14//如果有設Key,設true則保留dt1的資料;設false則保留dt2的資料
15dt1.Merge(dt2, true);
16 
17gv_merge.DataSource = dt1;
18gv_merge.DataBind();
Merge有幾個多載,我故意將兩個資料來源都存在ID為 5 的資料,如果不設Key則就會顯示兩筆ID為5的資料,如設定為true則會保留主表的資料(dt1),false則反之。

 

結果:

image

--

沒有留言:

張貼留言