2008-11-12 88 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

相关问题