cómo copiar solo las columnas de una DataTable a otra DataTable?cómo copiar solo las columnas de una DataTable a otra DataTable?
Respuesta
DataTable.Clone()
debería hacer el truco.
DataTable newTable = originalTable.Clone();
Si solo se requieren las columnas, se puede usar DataTable.Clone()
. Con la función Clone
solo se copiará el esquema. Pero DataTable.Copy()
copia tanto la estructura como los datos
P. ej.
DataTable dt = new DataTable();
dt.Columns.Add("Column Name");
dt.Rows.Add("Column Data");
DataTable dt1 = dt.Clone();
DataTable dt2 = dt.Copy();
dt1
tendrá solamente la columna uno, sino dt2
tendrá una columna con una fila.
¿Acaso Barry ya no dio esta respuesta hace tres horas? –
gracias mucho por la ayuda :-) – user354547
DataTable.Clone()
El método funciona muy bien cuando se desea crear una nueva DataTable, pero puede haber casos en los que se quieren añadir las columnas de esquema de un DataTable a otro DataTable existente.
Por ejemplo, si ha derivado una nueva subclase de DataTable y desea importar información de esquema en ella, no podría usar Clone().
ej .:
public class CoolNewTable : DataTable {
public void FillFromReader(DbDataReader reader) {
// We want to get the schema information (i.e. columns) from the
// DbDataReader and
// import it into *this* DataTable, NOT a new one.
DataTable schema = reader.GetSchemaTable();
//GetSchemaTable() returns a DataTable with the columns we want.
ImportSchema(this, schema); // <--- how do we do this?
}
}
La respuesta es sólo para crear nuevos DataColumns en el DataTable existente utilizando columnas de la tabla de esquema como plantillas.
I.e. el código para ImportSchema sería algo como esto:
void ImportSchema(DataTable dest, DataTable source) {
foreach(var c in source.Columns)
dest.Columns.Add(c);
}
o, si está utilizando LINQ:
void ImportSchema(DataTable dest, DataTable source) {
var cols = source.Columns.Cast<DataColumn>().ToArray();
dest.Columns.AddRange(cols);
}
Esto fue sólo un ejemplo de una situación en la que es posible que desee copiar esquemas/columnas de una DataTable a otra sin usar Clone() para crear una DataTable completamente nueva. Estoy seguro de que he encontrado varios otros también.
si trato de hacer un ciclo como su iteración sugerida que se muestra arriba en 'ImportSchema' - me sale un error diciendo que la columna ya pertenece a otra DataTable. En otras palabras, no puede iterar una colección de columnas de DataTable existente y asignar esas instancias específicas a una instancia diferente de DataTable. – bkwdesign
creo que este podría ser el camino para escribir ms ImportSchema Dim como nuevo IO.MemoryStream srcDataTable.WriteXmlSchema (ms) ms.Seek (0, IO.SeekOrigin.Begin) destDataTable.ReadXmlSchema (ms) – bkwdesign
Datatable.Clone
es lento para tablas grandes. Actualmente estoy usando esto:
Dim target As DataTable =
New DataView(source, "1=2", Nothing, DataViewRowState.CurrentRows)
.ToTable()
Tenga en cuenta que esto solo copia la estructura de la tabla fuente, no los datos.
OP preguntó para la solución de C#. Esto es VB – AaA
Si desea copiar el DataTable
a otro DataTable
de diferentes DataType
entonces usted puede hacer esto:
- En primer lugar clonar el primer
DataType
de manera que sólo se puede obtener la estructura. - A continuación, modifique la estructura recién creada según su necesidad y luego copie los datos a
DataTable
recién creado.
Así:
Dim dt1 As New DataTable
dt1 = dtExcelData.Clone()
dt1.Columns(17).DataType = System.Type.GetType("System.Decimal")
dt1.Columns(26).DataType = System.Type.GetType("System.Decimal")
dt1.Columns(30).DataType = System.Type.GetType("System.Decimal")
dt1.Columns(35).DataType = System.Type.GetType("System.Decimal")
dt1.Columns(38).DataType = System.Type.GetType("System.Decimal")
dt1 = dtprevious.Copy()
De ahí se obtiene el mismo DataTable
pero revisó la estructura
Si desea que la estructura de una tabla en particular de datos (DataTable1) con títulos de las columnas (sin datos) a otro tabla de datos (dataTable2), puede seguir el siguiente código:
DataTable dataTable2 = dataTable1.Clone();
dataTable2.Clear();
Ahora puede llenar dataTable2 a según su condición. :)
- 1. Columnas seleccionadas de DataTable
- 2. DataTable con columnas dinámicas
- 3. Casting datatable genérico a datatable type
- 4. Copia de datos de una DataTable a otra
- 5. Cómo agregar un DataTable a otro DataTable
- 6. Obtener una Columnas DataTable Tipo de datos
- 7. Eliminar columnas de DataTable en C#
- 8. C#, DataTable a ArrayList?
- 9. Crear un nuevo DataTable con las mismas columnas que otro DataTable
- 10. C# DataTable combinación interna con columnas dinámicas
- 11. Convertir DataTable a CSV stream
- 12. Cómo iterar a través de una DataTable
- 13. De datatable a Entity
- 14. DataTable a JSON
- 15. DataColumn a DataTable
- 16. DataTable a JSON usando jQuery
- 17. ¿Cómo exportar una DataTable a Xml con TODAS las columnas como atributos?
- 18. Cómo convertir IQueryable a DataTable
- 19. DataTable, cómo eliminar condicionalmente las filas
- 20. Agregando valores a celdas de DataTable específicas
- 21. CDocumento XMLDo a DataTable?
- 22. ¿Cómo construir una DataTable desde un DataGridView?
- 23. LINQ to DataTable
- 24. bucle a través de las filas de un DataTable
- 25. Acceso a las filas eliminadas de una DataTable
- 26. Agregando dinámicamente una fila a las caras de datos dataTable
- 27. cómo enlazar ComboBox con DataTable
- 28. Exportación de datos desde una YUI DataTable
- 29. convertir datos csv a DataTable en VB.net
- 30. ¿Cómo extraigo datos de una DataTable?
gracias mucho :-) – user354547
¡Estaba buscando este! –