2008-11-12 30 views
38

Nếu tôi có 2 DataTables (dtOne và dtTwo) và tôi muốn hợp nhất chúng và đặt chúng trong một DataTable khác (dtAll). Làm thế nào tôi có thể làm điều này trong C#? Tôi đã thử câu lệnh Merge trên datatable, nhưng điều này trả về void. Merge có bảo toàn dữ liệu không? Ví dụ: nếu tôi làm:Hợp nhất 2 DataTables và lưu trữ trong một mới

dtOne.Merge(dtTwo); 

DtOne có thay đổi hoặc không thay đổi và nếu một trong hai thay đổi, hãy thực hiện thay đổi?

Tôi biết tôi không thể làm điều này vì Merge trả về void, nhưng tôi muốn để có thể lưu trữ các Sáp nhập của cả hai dtOne và dtTwo trong dtAll:

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

Trả lời

75

Phương pháp Merge mất các giá trị từ bảng thứ hai và kết hợp chúng với bảng đầu tiên, do đó, đầu tiên sẽ giữ các giá trị từ cả hai.

Nếu bạn muốn giữ cả hai bảng ban đầu, bạn có thể sao chép bản gốc đầu tiên, sau đó hợp nhất:

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

Mã bởi @ Knickerless-Noggins: 'public static DataTable MergeTwoDataTables (Bảng dữ liệu TableA, DataTable tableB) {DataTable MethodResult = null; thử {DataTable TableA = tableA.Copy(); TableA.Merge (bảngB); MethodResult = TableA; } catch // (Exception ex) {//ex.HandleException(); } trả về MethodResult; } ' – Kiquenet

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

IMHO, không phải là câu trả lời hữu ích. Câu trả lời giống như câu trả lời của [Jeromy Irvine] (http://stackoverflow.com/a/285500/979621). Cuối cùng, sử dụng *** Merge ***. – Kiquenet

27

(Khá muộn, nhưng có thể giúp đỡ một ai đó vấp ngã khi câu hỏi này.)

Thay vì dtAll = dtOne.Copy(); trong Jeromy Irvine's answer bạn có thể làm:

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

và vân vân.

Kỹ thuật này rất hữu ích trong một vòng lặp mà bạn muốn lặp đi lặp lại hợp nhất các bảng dữ liệu:

DataTable dtAllCountries = new DataTable(); 

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

Đây là những gì tôi đã làm cho việc sáp nhập hai datatables và ràng buộc kết quả cuối cùng để 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

IMHO, không phải là câu trả lời hữu ích. Câu trả lời giống như câu trả lời của [Jeromy Irvine] (http://stackoverflow.com/a/285500/979621). Cuối cùng, sử dụng *** Merge ***. – Kiquenet

Các vấn đề liên quan