2008-11-12 201 views
38

如果我有2個數據表(dtOne和dtTwo),我想合併它們並將它們放在另一個數據表(dtAll)中。我怎樣才能在C#中做到這一點?我在數據表上嘗試了Merge語句,但是這返回void。合併是否保留數據?例如,如果我這樣做:合併2個數據表並存儲在一個新的數據表中

dtOne.Merge(dtTwo); 

不dtOne變化或不變化dtTwo,如果任何一個變化,做的修改保存?

我知道我不能這樣做,因爲合併返回void,但我希望能夠既dtOne和dtTwo合併存儲在dtAll:

//Will Not work, How do I do this 
dtAll = dtOne.Merge(dtTwo); 

回答

75

Merge方法從所採用的值第二個表,並將它們與第一個表合併,所以第一個表現在將保存來自兩者的值。

如果你想保留這兩個原始表的,你可以複製原來的第一,然後合併:

dtAll = dtOne.Copy(); 
dtAll.Merge(dtTwo); 
+1

代碼by @ Knickerless-Noggins:`公共靜態DataTable MergeTwoDataTables(DataTable tableA,DataTable tableB){DataTable MethodResult = null;嘗試{DataTable TableA = tableA.Copy(); TableA.Merge(tableB的); MethodResult = TableA; } catch //(Exception ex){//ex.HandleException(); }返回MethodResult; }` – Kiquenet 2017-03-31 05:55:35

1
DataTable dtAll = new DataTable(); 
DataTable dt= new DataTable(); 
foreach (int id in lst) 
{ 
    dt.Merge(GetDataTableByID(id)); // Get Data Methode return DataTable 
} 
dtAll = dt; 
+0

恕我直言,沒有用的答案。相同的答案比[Jeromy Irvine的答案](http://stackoverflow.com/a/285500/979621)。最後是用***合併***。 – Kiquenet 2017-03-31 05:48:09

27

(比較晚,但可能幫助別人絆在了這個問題。)

代替dtAll = dtOne.Copy();Jeromy Irvine's answer你可以這樣做:

dtAll = new DataTable(); 
... 
dtAll.Merge(dtOne); 
dtAll.Merge(dtTwo); 
dtAll.Merge(dtThree); 
... 

等。

這種技術是在要反覆合併數據表的循環有用:

DataTable dtAllCountries = new DataTable(); 

foreach(String strCountry in listCountries) 
{ 
    DataTable dtCountry = getData(strCountry); //Some function that returns a data table 
    dtAllCountries.Merge(dtCountry); 
} 
0

這就是我做了合併兩個數據表而最終的結果綁定到GridView

 DataTable dtTemp=new DataTable(); 
     for (int k = 0; k < GridView2.Rows.Count; k++) 
     { 
      string roomno = GridView2.Rows[k].Cells[1].Text; 
      DataTable dtx = GetRoomDetails(chk, roomno, out msg); 
      if (dtx.Rows.Count > 0) 
      { 
       dtTemp.Merge(dtx); 
       dtTemp.AcceptChanges(); 

      } 
     } 
+0

恕我直言,沒有用的答案。相同的答案比[Jeromy Irvine的答案](http://stackoverflow.com/a/285500/979621)。最後是用***合併***。 – Kiquenet 2017-03-31 05:48:51

相關問題