2008-11-12 3 views
38

Если у меня есть 2 DataTables (dtOne и dtTwo), и я хочу объединить их и поместить их в другой DataTable (dtAll). Как это сделать на C#? Я попробовал оператор Merge на datatable, но это возвращает void. Сохраняет ли Merge данные? Например, если я делаю:Merge 2 DataTables и сохранить в новом

dtOne.Merge(dtTwo); 

Does dtOne изменение или делает dtTwo изменения, и если ни один изменений, делать изменения сохранить?

Я знаю, что я не могу этого сделать, потому что Merge возвращается тщетным, но я хочу, чтобы иметь возможность хранить Слияние как 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: `public static DataTable MergeTwoDataTables (таблица DataTableA, таблица DataTableB) {DataTable MethodResult = null; try {DataTable TableA = tableA.Copy(); TableA.Merge (TableB); MethodResult = TableA; } catch // (Exception ex) {//ex.HandleException(); } return MethodResult; } ` – Kiquenet 2017-03-31 05:55:35

9
dtAll = dtOne.Copy(); 
dtAll.Merge(dtTwo,true); 

Параметр ИСТИНА сохранить изменения.

Для получения более подробной информации обратитесь к приведенной ниже ссылке. http://msdn.microsoft.com/en-us/library/wkk7s5zk.aspx

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

ИМХО, не полезный ответ. Тот же ответ, чем [ответ Джерами Ирвин] (http://stackoverflow.com/a/285500/979621). Наконец, используется *** Merge ***. – 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

Это то, что я сделал для объединения двух 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

ИМХО, не полезный ответ. Тот же ответ, чем [ответ Джерами Ирвин] (http://stackoverflow.com/a/285500/979621). Наконец, используется *** Merge ***. – Kiquenet 2017-03-31 05:48:51

Смежные вопросы