2008-11-12 3 views
38

2 개의 DataTable (dtOne 및 dtTwo)을 병합하고 병합하고 다른 DataTable (dtAll)에 넣으려는 경우. 어떻게 C#에서 이것을 할 수 있습니까? Merge 문을 데이터 테이블에서 시도했지만 void를 반환합니다. Merge는 데이터를 보존합니까? 예를 들어, 내가 할 경우 :2 개의 DataTable을 병합하여 새로운 데이터로 저장

dtOne.Merge(dtTwo); 

합니까 dtOne 변경 또는 dtTwo 변경을 수행하고 중 하나를 변경하는 경우, 변경 사항이 유지합니까?

은 내가 때문에 무효 수익을 병합이 작업을 수행 할 수있어,하지만 난 dtAll에 dtOne 및 dtTwo 모두의 합병을 저장할 수 있도록하려면 :

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

답변

75

Merge 방법은에서 값을 사용합니다 두 번째 테이블을 만들고이를 첫 번째 테이블과 병합하므로 첫 번째 테이블은 두 테이블의 값을 보유하게됩니다.

원래의 테이블을 모두 유지하려면, 당신은 다음 병합, 원래 첫번째 복사 할 수 있습니다 :

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

에 최종 결과를 결합하는 것입니다 :

이 기술은 당신이 반복적으로 데이터 테이블을 병합 할 루프에 유용하다 @ Knickerless-Noggins의 코드 :'public static DataTable MergeTwoDataTables (DataTable tableA, DataTable tableB) {DataTable MethodResult = null; 시도 {DataTable TableA = tableA.Copy(); TableA.Merge (tableB); MethodResult = TableA; } catch // (Exception ex) {//ex.HandleException(); } return 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, 유용한 대답이 아닙니다. [Jeromy Irvine의 대답] (http://stackoverflow.com/a/285500/979621)과 같은 대답입니다. 마지막으로 *** Merge ***를 사용합니다. – Kiquenet

27

(아주 늦게, 그러나이 질문에 걸림돌 사람을 도움이 될 수 있습니다.) Jeromy Irvine's answer에서

대신 dtAll = dtOne.Copy(); 당신이 할 수 있습니다 등등

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

이 내가 두 datatables을 병합했고, 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, 유용한 대답이 아닙니다. [Jeromy Irvine의 대답] (http://stackoverflow.com/a/285500/979621)과 같은 대답입니다. 마지막으로 *** Merge ***를 사용합니다. – Kiquenet

관련 문제