Je veux convertir un tableau DataRow
en DataTable
... Quelle est la manière la plus simple de faire ceci?Façon simple de convertir la matrice de datarow en datable
Répondre
Pourquoi ne pas itérer 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 même schéma que les DataRows dans votre tableau DataRow.
DataTable dt = new DataTable();
DataRow[] dr = (DataTable)dsData.Tables[0].Select("Some Criteria");
dt.Rows.Add(dr);
J'ai déjà essayé comme ça .. Une erreur se produit quelque chose comme « tableau d'entrée est plus longue que le nombre de colonnes dans cette table. " – Nila
AS Jay a souligné, Assurez-vous que votre dataTable a le même schéma que les DataRows dans votre tableau DataRow –
Oui .. J'ai essayé. J'ai utilisé Datatable1 = datatable2.Clone(); Maintenant ça marche ... Merci :-) – Nila
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, il peut provoquer des erreurs telles que La source ne contient pas DataRows. Par conséquent, si vous décidez d'utiliser cette méthode CopyToDataTable()
, vous devez vérifier le tableau pour savoir s'il a des données ou non.
if (dr.Length > 0)
DataTable dt1 = dr.CopyToDataTable();
Référence disponible sur MSDN: DataTableExtensions.CopyToDataTable Method (IEnumerable)
J'aime celui-ci. –
D'où avez-vous eu 'copyToDataTable()'? Je ne l'ai pas trouvé dans .net 2.0 – SMUsamaShah
. Net Framework 3.5+ –
Voici la solution. Cela devrait fonctionner correctement.
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);
}
Une autre façon est d'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 = myDataRowCollection.CopyToDataTable<DataRow>();
DataTable dt = new DataTable();
foreach (DataRow dr in drResults)
{
dt.ImportRow(dr);
}
Une façon 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());
Incase quelqu'un a besoin dans VB.NET:
Dim dataRow as DataRow
Dim yourNewDataTable as new datatable
For Each dataRow In yourArray
yourNewDataTable.ImportRow(dataRow)
Next
.Net 3.5+ ajouté DataTableExtensions, utilisez DataTableExtensions.CopyToDataTable Méthode
Pour datarow ensemble il suffit d'utiliser .CopyToDataTable() et il retournera datatable.
Pour une utilisation unique datarow
new DataRow[] { myDataRow }.CopyToDataTable()
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);
}
Please ajouter quelques explications sur le code fourni –
- 1. Convertir DataRowCollection en DataRow []
- 2. Convertir tableau en matrice
- 3. Question simple à propos de la matrice numpy en python
- 4. Convertir la matrice xypique en eps. (LaTeX)
- 5. Comment puis-je convertir DataRow en chaîne de caractères?
- 6. Quel est le moyen le plus simple de convertir une matrice de caractères en une matrice WCHAR?
- 7. Convertir une matrice décimale en une matrice binaire dans SciPy
- 8. Façon simple de convertir des barres obliques dans un Makefile?
- 9. Une façon simple de convertir en/de types Variant en C++
- 10. Convertir jpeg/png en une matrice de pixels en java
- 11. La manière la plus simple de convertir IGrouping en IHierarchicalDataSource
- 12. convertir une matrice de listes à une matrice
- 13. convertir l'image en matrice et vice versa?
- 14. Convertir une image en une matrice en python
- 15. Convertir tronc à une matrice de projection en Java 3d
- 16. table Convertir en matrice par les noms de colonnes
- 17. Question LinQ simple: convertir [] [] en []
- 18. La meilleure façon de convertir char * non signé en int?
- 19. meilleure façon de convertir la collection en chaîne
- 20. Bonne façon de convertir la chaîne en NSDate (iphone)
- 21. Appel de Distinct() sur la collection DataRow
- 22. Y at-il de toute façon de convertir la fonction C# en procédure stockée SQL Server?
- 23. Quel est le meilleur moyen de convertir un datarow [] en Liste <int>?
- 24. Conversion ASP.NET de DataRow [] en DataTable
- 25. Conversion de datarow [] en xml. C'est possible?
- 26. La façon la plus simple de convertir CArchive pour utiliser la base de données SQL pour la sérialisation?
- 27. Comment convertir toutes les clés d'une matrice multidimensionnelle en snake_case?
- 28. C# Convertir une matrice d'octets en liste générique
- 29. La meilleure façon de convertir « Nom simple classe » à « Nom complet de classe » à l'objet en Java
- 30. Sous-ensemble de colonnes datable d'un autre datable
Cette technique est utile si vous obtenez le message d'erreur "Une source de données valide est utilisée pour 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 faire: 'DataTable dataTable = new DataTable(); dataTable.ImportRow (dataRow); MyControl.DataSource = dataTable; ' – humbads
+1 Je préfère ceci plutôt que' rowArray.CopyToDataTable(); 'car cela conserve le schéma de la table et ne le remplace pas par un nouvel objet table! –
Très bien! Mais je suggérerais de cloner le DataTable avant le foreach. Il copie le format de DataTable: newDataTable = oldDataTable.clone(); – Whiplash