2011-05-31 12 views
12

Tengo un escenario en el que obtengo una tabla de datos con 65 columnas y 100 filas. Necesito crear una tabla de datos más con las 100 filas, es decir, la misma que la tabla de datos original, pero debería tener solo 5 columnas de las 65 presentes en la tabla original. ¿Hay alguna forma de lograr esto sin bucle?Copiando datos de solo algunas columnas a una tabla de datos más

+0

WHT r las columnas do u desea conservar? ¿Las primeras cinco o las últimas cinco o las cinco columnas seleccionadas? Mencionalo claramente. – thevan

+0

@ thevan tengo alguna columna seleccionada – satyajit

+0

Hola Satyajit. Edité mi respuesta. Le dará la solución final a su pregunta. – thevan

Respuesta

26

try DataView.ToTable method.

utilizar de esta manera:

DataTable newTable = oldTable.DefaultView.ToTable(false, "ColumnName1", "ColumnName2", "ColumnName3", "ColumnName4", "ColumnName5"); 
+0

copiará las filas también – satyajit

+0

Oh, lo siento, esto no funcionará. Actualicé mi respuesta. – Reniuz

+0

¡Impresionante! me salvaste el tiempo: D – Tony

3
DataTable oldTable = new DataTable(); 
DataTable newTable = oldTable.Copy(); 
for (int i = 5; i < 65; i++) 
{ 
    newTable.Columns.RemoveAt(i); 
} 
2

Trate de este tipo,

DataTable newTable = oldTable.Copy(); 
newTable.Columns.Remove("ColumnName"); 

Quita las columnas deseadas aquí.

Aquí es la mejor solución para su Pregunta:

DataTable dt = new DataTable(); 
string [] column = {"Column1", "Column2"}; 
dt = DTItem.DefaultView.ToTable("dd", false, column);  
//DTItem is the Existing Table and "dd" is the temporary tablename, u give whatever u want 
1
private void button3_Click(object sender, EventArgs e) 
    { 
     DataTable destiny = new DataTable(); 
     destiny.Columns.Add("c1"); 
     destiny.Columns.Add("c2"); 
     destiny.Columns.Add("c3"); 
     destiny.Columns.Add("c4"); 

     CopyColumns(dtST_Split, destiny, "c1", "c2","c3","c4"); 

    } 

    private void CopyColumns(DataTable source, DataTable dest, params string[] columns) 
    { 
     foreach (DataRow sourcerow in source.Rows) 
     { 
      DataRow destRow = dest.NewRow(); 
      foreach (string colname in columns) 
      { 
       destRow[colname] = sourcerow[colname]; 
      } 
      dest.Rows.Add(destRow); 
     } 
    } 
+0

¿Puede agregar contexto a su respuesta? – Dev2rights

Cuestiones relacionadas