Je veux convertir un DataRow
en DataTable
... Quelle est la façon la plus simple de procéder ?
D'où tenez-vous copyToDataTable()
? Je ne l'ai pas trouvé dans .net 2.0.
Je veux convertir un DataRow
en DataTable
... Quelle est la façon la plus simple de procéder ?
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 causer 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 : Méthode DataTableExtensions.CopyToDataTable (IEnumerable)
Ceci devrait être marqué comme une bonne réponse puisque copyToDataTable()
crée une copie parfaite des colonnes des lignes sélectionnées, tandis que la méthode datatable.ImportRow(row)
La méthode ne fonctionne pas
Cette méthode n'est pas bonne si la table a déjà des lignes, car elle remplace ce qui est déjà là. Si la table est vide au départ, c'est bon.
Pourquoi ne pas itérer à travers votre tableau de DataRow et ajouter (en utilisant DataRow.ImportRow, si nécessaire, pour obtenir une copie du 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.
Cette technique est utile si vous obtenez le message d'erreur "An invalid data source is being used for MyControl. Une source de données valide doit implémenter IListSource ou IEnumerable" lorsque vous essayez de lier un DataRow directement à la propriété DataSource d'un contrôle. Voici comment procéder : DataTable dataTable = new DataTable(); dataTable.ImportRow(dataRow); MyControl.DataSource = dataTable;
+1 Je préfère cela plutôt que rowArray.CopyToDataTable();
parce que cela conserve le schéma de la table et ne le remplace pas par un nouvel objet de table !
Très bien ! Mais je voudrais suggérer de cloner la DataTable avant le foreach. Il copie le format de la DataTable : newDataTable = oldDataTable.clone() ;
J'ai déjà essayé comme ça Une erreur se produit, du genre "Le tableau d'entrée est plus long que le nombre de colonnes de ce tableau".
Comme Jay l'a souligné, assurez-vous que votre DataTable a le même schéma que les DataRows de votre tableau DataRow.
Oui, j'ai essayé. J'ai utilisé Datatable1=datatable2.Clone() ; Maintenant, cela fonctionne... Merci :-)
Une autre méthode 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");
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.