Quiero convertir una matriz DataRow
en DataTable
... ¿Cuál es la forma más sencilla de hacerlo?Forma simple de convertir datarow array a datatable
Respuesta
Por qué no iterar a través de la matriz de DataRow y añadir (utilizando DataRow.ImportRow, si es necesario, para obtener una copia de la DataRow), algo así como:
foreach (DataRow row in rowArray) {
dataTable.ImportRow(row);
}
Asegúrese de que tiene el dataTable mismo esquema que las DataRows en su matriz DataRow.
DataTable dt = new DataTable();
DataRow[] dr = (DataTable)dsData.Tables[0].Select("Some Criteria");
dt.Rows.Add(dr);
ya me trataron como esa .. El error se produce algo así como "matriz de entrada es más larga que el número de columnas en esta tabla ". – Nila
Como Jay señaló, asegúrese de que su dataTable tenga el mismo esquema que las DataRows en su matriz DataRow –
Sí ... Lo intenté. Utilicé Datatable1 = datatable2.Clone(); Ahora está funcionando ... Gracias :-) – Nila
Para .Net Framework 3.5+
DataTable dt = new DataTable();
DataRow[] dr = dt.Select("Your string");
DataTable dt1 = dr.CopyToDataTable();
Pero si no hay filas de la matriz, puede hacer que los errores como La fuente no contiene DataRows. Por lo tanto, si decide utilizar este método CopyToDataTable()
, debe verificar la matriz para saber si tiene datarows o no.
if (dr.Length > 0)
DataTable dt1 = dr.CopyToDataTable();
de referencia disponible en MSDN: DataTableExtensions.CopyToDataTable Method (IEnumerable)
Me gusta este. –
¿De dónde obtienes 'copyToDataTable()'? No lo encontré en .net 2.0 – SMUsamaShah
.NET Framework 3.5+ –
Aquí está la solución. Debería funcionar bien.
DataTable dt = new DataTable();
dt = dsData.Tables[0].Clone();
DataRows[] drResults = dsData.Tables[0].Select("ColName = 'criteria');
foreach(DataRow dr in drResults)
{
object[] row = dr.ItemArray;
dt.Rows.Add(row);
}
Otra forma es utilizar un DataView
// Create a DataTable
DataTable table = new DataTable()
...
// Filter and Sort expressions
string expression = "[Birth Year] >= 1983";
string sortOrder = "[Birth Year] ASC";
// Create a DataView using the table as its source and the filter and sort expressions
DataView dv = new DataView(table, expression, sortOrder, DataViewRowState.CurrentRows);
// Convert the DataView to a DataTable
DataTable new_table = dv.ToTable("NewTableName");
DataTable dt = myDataRowCollection.CopyToDataTable<DataRow>();
DataTable dt = new DataTable();
foreach (DataRow dr in drResults)
{
dt.ImportRow(dr);
}
Una manera sencilla es:
// dtData is DataTable that contain data
DataTable dt = dtData.Select("Condition=1").CopyToDataTable();
// or existing typed DataTable dt
dt.Merge(dtData.Select("Condition=1").CopyToDataTable());
En caso que alguien lo necesita en VB.NET:
Dim dataRow as DataRow
Dim yourNewDataTable as new datatable
For Each dataRow In yourArray
yourNewDataTable.ImportRow(dataRow)
Next
.Net 3.5+ añadió DataTableExtensions, utilice DataTableExtensions.CopyToDataTable Método
Para DataRow array sólo tiene que utilizar .CopyToDataTable() y volverá tabla de datos.
Para un solo uso DataRow
new DataRow[] { myDataRow }.CopyToDataTable()
Usted podría utilizar System.Linq así:
if (dataRows != null && dataRows.Length > 0)
{
dataTable = dataRows.AsEnumerable().CopyToDataTable();
}
DataTable dataTable = new DataTable();
dataTable = OldDataTable.Tables[0].Clone();
foreach(DataRow dr in RowData.Tables[0].Rows)
{
DataRow AddNewRow = dataTable.AddNewRow();
AddNewRow.ItemArray = dr.ItemArray;
dataTable.Rows.Add(AddNewRow);
}
Please agregue alguna explicación del código provisto –
- 1. ¿Cómo puedo convertir DataRow a string Array?
- 2. ¿Convertir DataTable a lista genérica?
- 3. DataColumn Name from DataRow (no DataTable)
- 4. Convertir DataRowCollection en DataRow []
- 5. Convertir DataTable a CSV stream
- 6. ¿Cómo agregar un nuevo DataRow en DataTable?
- 7. ¿Puedo agregar el mismo DataRow a una DataTable varias veces?
- 8. Convertir DataTable a IEnumerable <T>
- 9. ¿Cómo convertir una cadena simple a Byte Array en VBA?
- 10. Cómo convertir IQueryable a DataTable
- 11. ¿Convertir selecciones nuevas a DataTable?
- 12. Convertir datatable a lector de datos
- 13. forma simple de la clase Array y Enum.GetValues ()
- 14. Convertir Numpy Array a OpenCV Array
- 15. Si estoy actualizando un DataRow, ¿bloqueo el DataTable completo o solo el DataRow?
- 16. eliminar duplicados de DataTable y costumbre IEqualityComparer <DataRow>
- 17. Convertir Java Array a Iterable
- 18. C# DataRow vacío a comprobar
- 19. convertir datos csv a DataTable en VB.net
- 20. Convertir DataTable a lista genérica en C#
- 21. Convertir SqlDataSource a DataTable y DataView
- 22. DataTable Convertir a la lista <T>
- 23. Convertir JSON para DataTable
- 24. Convertir Hash Map a 2D Array
- 25. traer datarow al objeto C#
- 26. Convertir array MD5 a String java
- 27. Dado un array [a1b2c3d4] convertir a [abcd1234]
- 28. ¿Cuál es la mejor forma de convertir una tabla Html a datatable
- 29. PowerShell convertir Char Array a la cadena
- 30. Cómo convertir Array a ArrayList en VB.Net
Esta técnica es útil si aparece el mensaje de error "Se está utilizando una fuente de datos no válida para MyControl. Una fuente de datos válida debe implementar IListSource o IEnumerable" al intentar enlazar una DataRow directamente a la propiedad DataSource de un control. Aquí le mostramos cómo hacerlo: 'DataTable dataTable = new DataTable(); dataTable.ImportRow (dataRow); MyControl.DataSource = dataTable; ' – humbads
+1 Prefiero esto en lugar de' rowArray.CopyToDataTable(); 'porque esto mantiene el esquema de la tabla y no lo reemplaza con un nuevo objeto de tabla. –
¡Muy bien! Pero yo recomendaría clonar DataTable antes de foreach. Copia el formato de DataTable: newDataTable = oldDataTable.clone(); – Whiplash