Je veux convertir un tableau DataRow
en DataTable
... Quel est le moyen le plus simple de procéder?
Pourquoi ne pas parcourir votre tableau DataRow et ajouter (à l'aide de DataRow.ImportRow, si nécessaire, une copie du DataRow), par exemple:
foreach (DataRow row in rowArray) {
dataTable.ImportRow(row);
}
Assurez-vous que votre dataTable a le même schéma que le DataRows dans votre tableau DataRow.
Pour .Net Framework 3.5+
DataTable dt = new DataTable();
DataRow[] dr = dt.Select("Your string");
DataTable dt1 = dr.CopyToDataTable();
Mais s'il n'y a pas de lignes dans le tableau, cela peut entraîner des erreurs telles que La source ne contient pas de DataRows. Par conséquent, si vous décidez d'utiliser cette méthode CopyToDataTable()
, vous devez vérifier le tableau pour savoir s'il contient des datarows ou non.
if (dr.Length > 0)
DataTable dt1 = dr.CopyToDataTable();
Référence disponible sur MSDN: DataTableExtensions.CopyToDataTable, méthode (IEnumerable)
Une autre façon consiste à utiliser 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 = new DataTable();
DataRow[] dr = (DataTable)dsData.Tables[0].Select("Some Criteria");
dt.Rows.Add(dr);
La manière simple est:
// 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 = myDataRowCollection.CopyToDataTable<DataRow>();
DataTable dt = new DataTable();
foreach (DataRow dr in drResults)
{
dt.ImportRow(dr);
}
Voici la solution. Cela devrait bien fonctionner.
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);
}
.Net 3.5+ ajouté DataTableExtensions, utilisez la méthode DataTableExtensions.CopyToDataTable
Pour un tableau datarow, utilisez simplement .CopyToDataTable () et il renverra datatable.
Pour une utilisation unique de datarow
new DataRow[] { myDataRow }.CopyToDataTable()
Incase quiconque en a besoin dans VB.NET:
Dim dataRow as DataRow
Dim yourNewDataTable as new datatable
For Each dataRow In yourArray
yourNewDataTable.ImportRow(dataRow)
Next
DataTable Assetdaterow =
(
from s in dtResourceTable.AsEnumerable()
where s.Field<DateTime>("Date") == Convert.ToDateTime(AssetDate)
select s
).CopyToDataTable();
Vous devez d'abord cloner la structure de la table de données, puis importer des lignes à l'aide de la boucle for
DataTable dataTable =dtExisting.Clone();
foreach (DataRow row in rowArray) {
dataTable.ImportRow(row);
}
Vous pouvez utiliser System.Linq comme ceci:
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);
}