合并2个数据表,并存储在一个新的

如果我有2个DataTable(dtOne和dtTwo),我想合并它们,并将它们放在另一个DataTable(dtAll)。 我怎样才能在C#中做到这一点? 我尝试了数据表上的Merge语句,但是这个返回void。 合并是否保留数据? 例如,如果我这样做:

dtOne.Merge(dtTwo); 

dtOne是否改变或dtTwo是否改变,如果任何一个改变,改变保存?

我知道我不能这样做,因为合并返回void,但我想能够存储dtOne和dtTwo在dtAll的合并:

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

Merge方法从第二个表中获取值,并将它们与第一个表合并,所以第一个将保存两个值。

如果要保留两个原始表,则可以先复制原始表,然后合并:

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

(很晚,但可能会帮助别人绊倒这个问题。)

而不是dtAll = dtOne.Copy(); 在Jeromy Irvine的答案你可以做:

 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); } 
 dtAll = dtOne.Copy(); dtAll.Merge(dtTwo,true); 

参数TRUE保存更改。

有关更多详情,请参阅下面的链接。 http://msdn.microsoft.com/en-us/library/wkk7s5zk.aspx

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

这是我为合并两个数据表而做的,并将最终结果绑定到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(); } }