Quiero convertir una DataRow
matriz en DataTable
... ¿Cuál es la forma más sencilla de hacer esto?
Quiero convertir una DataRow
matriz en DataTable
... ¿Cuál es la forma más sencilla de hacer esto?
Respuestas:
¿Por qué no iterar a través de su matriz DataRow y agregar (usando DataRow.ImportRow, si es necesario, para obtener una copia de DataRow), algo como:
foreach (DataRow row in rowArray) {
dataTable.ImportRow(row);
}
Asegúrese de que su dataTable tenga el mismo esquema que DataRows en su matriz DataRow.
rowArray.CopyToDataTable();
porque mantiene el esquema de la tabla y no lo reemplaza con un nuevo objeto de tabla!
Para .Net Framework 3.5+
DataTable dt = new DataTable();
DataRow[] dr = dt.Select("Your string");
DataTable dt1 = dr.CopyToDataTable();
Pero si no hay filas en la matriz, puede causar errores como El origen no contiene DataRows . Por lo tanto, si decide utilizar este método CopyToDataTable()
, debe verificar la matriz para saber si tiene filas de datos o no.
if (dr.Length > 0)
DataTable dt1 = dr.CopyToDataTable();
Referencia disponible en MSDN: Método DataTableExtensions.CopyToDataTable (IEnumerable)
copyToDataTable()
? No lo encontré en .net 2.0
copyToDataTable()
método crea una copia perfecta de las columnas de las filas seleccionadas, mientras que el datatable.ImportRow(row)
método no lo hace
DataTable dt = new DataTable();
DataRow[] dr = (DataTable)dsData.Tables[0].Select("Some Criteria");
dt.Rows.Add(dr);
Input array is longer than the number of columns in this table.
". Error de versión con clonación: " Unable to cast object of type 'System.Data.DataRow' to type 'System.IConvertible'.Couldn't store <System.Data.DataRow> in StoreOrder Column. Expected type is Int64.
" Nota: StoreOrder
es la primera columna del esquema de la tabla. Parece que está intentando meter toda la fila de datos en esa primera columna
Otra forma es usar 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");
La forma 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());
DataTable dt = new DataTable();
foreach (DataRow dr in drResults)
{
dt.ImportRow(dr);
}
DataTable Assetdaterow =
(
from s in dtResourceTable.AsEnumerable()
where s.Field<DateTime>("Date") == Convert.ToDateTime(AssetDate)
select s
).CopyToDataTable();
.Net 3.5+ agregó DataTableExtensions, use el método DataTableExtensions.CopyToDataTable
Para la matriz de fila de datos, simplemente use .CopyToDataTable () y devolverá la tabla de datos.
Para uso en una sola fila de datos
new DataRow[] { myDataRow }.CopyToDataTable()
En caso de que alguien lo necesite en VB.NET:
Dim dataRow as DataRow
Dim yourNewDataTable as new datatable
For Each dataRow In yourArray
yourNewDataTable.ImportRow(dataRow)
Next
Primero debe clonar la estructura de la tabla de datos y luego importar las filas usando el bucle for
DataTable dataTable =dtExisting.Clone();
foreach (DataRow row in rowArray) {
dataTable.ImportRow(row);
}
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);
}
DataTable dataTable = new DataTable(); dataTable.ImportRow(dataRow); MyControl.DataSource = dataTable;