Je souhaite convertir un DataRow
tableau en DataTable
... Quelle est la manière la plus simple de procéder?
Je souhaite convertir un DataRow
tableau en DataTable
... Quelle est la manière la plus simple de procéder?
Réponses:
Pourquoi ne pas parcourir votre tableau DataRow et ajouter (en utilisant DataRow.ImportRow, si nécessaire, pour obtenir une copie de DataRow), quelque chose comme:
foreach (DataRow row in rowArray) {
dataTable.ImportRow(row);
}
Assurez-vous que votre dataTable a le même schéma que les DataRows de votre tableau DataRow.
rowArray.CopyToDataTable();
parce que cela conserve le schéma de la table et ne le remplace pas par un nouvel objet de table!
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 provoquer 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 qu'il a des lignes de données ou non.
if (dr.Length > 0)
DataTable dt1 = dr.CopyToDataTable();
Référence disponible sur MSDN: DataTableExtensions.CopyToDataTable, méthode (IEnumerable)
copyToDataTable()
? Je ne l'ai pas trouvé dans .net 2.0
copyToDataTable()
méthode crée une copie parfaite des colonnes des lignes sélectionnées, tandis que la datatable.ImportRow(row)
méthode ne le fait pas
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.
". Erreur de version With-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.
" Remarque: StoreOrder
est la première colonne du schéma de table. Il semble qu'il essaie de brouiller tout le flux de données dans cette première colonne
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");
Un moyen 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 = 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+ a ajouté DataTableExtensions, utilisez la méthode DataTableExtensions.CopyToDataTable
Pour le tableau datarow, utilisez simplement .CopyToDataTable () et il retournera datable.
Pour une utilisation unique de flux de données
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
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);
}
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;