2008-11-12 22 views
38

Si tengo 2 DataTables (dtOne y dtTwo) y deseo fusionarlos y ponerlos en otra DataTable (dtAll). ¿Cómo puedo hacer esto en C#? Probé la declaración Merge en la tabla de datos, pero esto devuelve vacío. ¿Merge preserva los datos? Por ejemplo, si hago:Combinar 2 DataTables y almacenar en uno nuevo

dtOne.Merge(dtTwo); 

¿Cambia dtOne o hace dtTwo cambio y si uno los cambios, hacer los cambios preservan?

Yo sé que no puedo hacer esto porque Combinar vuelve vacío, pero quiero ser capaz de almacenar la fusión de ambas dtOne y dtTwo en dtAll:

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

Respuesta

75

El método Merge toma los valores de la segunda tabla y las fusiona con la primera tabla, por lo que la primera ahora contendrá los valores de ambos.

Si desea preservar tanto de las tablas originales, se puede copiar el primer original, y luego fusionar:

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

Código de @ Knickerless-Noggins: 'Public static DataTable MergeTwoDataTables (DataTable tableA, DataTable tableB) {DataTable MethodResult = null; intente {DataTable TableA = tableA.Copy(); TableA.Merge (tabla B); 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

en mi humilde opinión, respuesta no útil. La misma respuesta que [la respuesta de Jeromy Irvine] (http://stackoverflow.com/a/285500/979621). Finalmente, es uso *** Merge ***. – Kiquenet

27

(bastante tarde, pero podría ayudar a alguien tropezar con esta pregunta.)

En lugar de dtAll = dtOne.Copy(); en Jeromy Irvine's answer que puede hacer:

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

y así sucesivamente.

Esta técnica es útil en un bucle en el que desea combinar de forma iterativa tablas de datos:

DataTable dtAllCountries = new DataTable(); 

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

Esto es lo que hice para la fusión de dos tablas de datos y se unen el resultado final al 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

en mi humilde opinión, respuesta no útil. La misma respuesta que [la respuesta de Jeromy Irvine] (http://stackoverflow.com/a/285500/979621). Finalmente, es uso *** Merge ***. – Kiquenet

Cuestiones relacionadas