Quero converter um DataRow
array em DataTable
... Qual é a maneira mais simples de fazer isso?
Quero converter um DataRow
array em DataTable
... Qual é a maneira mais simples de fazer isso?
Respostas:
Por que não iterar por meio de sua matriz DataRow e adicionar (usando DataRow.ImportRow, se necessário, para obter uma cópia da DataRow), algo como:
foreach (DataRow row in rowArray) {
dataTable.ImportRow(row);
}
Certifique-se de que sua dataTable tenha o mesmo esquema que a DataRows em sua matriz DataRow.
rowArray.CopyToDataTable();
porque isso mantém o esquema da tabela e não o está substituindo por um novo objeto de tabela!
Para .Net Framework 3.5+
DataTable dt = new DataTable();
DataRow[] dr = dt.Select("Your string");
DataTable dt1 = dr.CopyToDataTable();
Mas se não houver linhas na matriz, isso pode causar erros como A fonte não contém DataRows . Portanto, se você decidir usar este método CopyToDataTable()
, deve verificar o array para saber se ele tem datarows ou não.
if (dr.Length > 0)
DataTable dt1 = dr.CopyToDataTable();
Referência disponível no MSDN: Método DataTableExtensions.CopyToDataTable (IEnumerable)
copyToDataTable()
? Não o encontrei em .net 2.0
copyToDataTable()
método cria uma cópia perfeita das colunas das linhas selecionadas, enquanto o datatable.ImportRow(row)
método não
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.
". Erro de versão com clone: " 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.
" Observação: StoreOrder
é a primeira coluna no esquema da tabela. Parece que ele está tentando colocar o datarow inteiro na primeira coluna
Outra maneira é usar um 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");
A maneira simples é:
// 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+ adicionado DataTableExtensions, use o método DataTableExtensions.CopyToDataTable
Para array datarow apenas use .CopyToDataTable () e ele retornará a tabela de dados.
Para uso em um único datarow
new DataRow[] { myDataRow }.CopyToDataTable()
No caso de alguém precisar em VB.NET:
Dim dataRow as DataRow
Dim yourNewDataTable as new datatable
For Each dataRow In yourArray
yourNewDataTable.ImportRow(dataRow)
Next
Você precisa clonar a estrutura da tabela de dados primeiro, em seguida, importar as linhas usando o loop 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;