Filtrer un dataset via un dataview.rowfilter puis le sauver en xml

Soyez le premier à donner votre avis sur cette source.

Snippet vu 21 149 fois - Téléchargée 30 fois

Contenu du snippet

Suite à une question posée sur le forum ado.net voici comment filtrer un DataSet puis le sauver en Xml :
La difficulté vient du fait que lorsque l'on interroge le DataSet d'un DataView filtré via RowFilter, on obtient toujours le DataSet d'origine non filtré, d'où le clone de la table et l'import des lignes une à une, la commande WriteXml n'étant apparemment disponible que pour les DataSet :

Source / Exemple :


Dim dvFiltre As New DataView(ds.Tables(sMaTable))
dvFiltre.RowFilter = sMonCritere
Dim dtFiltre As DataTable = dvFiltre.Table.Clone
For Each dvr As DataRowView In dvFiltre
    dtFiltre.ImportRow(dvr.Row)
Next dvr
Dim dsFiltre As New DataSet
dsFiltre.Tables.Add(dtFiltre)
dsFiltre.WriteXml(sMonChemin)

Conclusion :


D'après la source :
www.windowsformsdatagridhelp.com/default.aspx?ID=655b418e-8e9d-4303-8be7-d6ad9bebf57f

A voir également

Ajouter un commentaire Commentaires
Messages postés
91
Date d'inscription
dimanche 18 août 2002
Statut
Membre
Dernière intervention
21 février 2015

Ah au fait encore une chose : merci à Patrice, sans qui je n'aurais probablement pas trouvé.
Messages postés
91
Date d'inscription
dimanche 18 août 2002
Statut
Membre
Dernière intervention
21 février 2015

Ah au fait ça y est j'ai envoyé le retour à Microsoft.
Messages postés
91
Date d'inscription
dimanche 18 août 2002
Statut
Membre
Dernière intervention
21 février 2015

J'ai trouvé !
Le bug du constructeur DataView à quatre paramètres se situe au niveau de l'aide.
On demande une chaîne de caractères en deuxième posision pour préciser le filtre, donc, intuitivement, on se dit que si on ne veut pas mettre de filtre il faut y mettre une chaîne vide. Si on fait ça, le tri ne fonctionne pas. Il faut mettre null, et oublier tout le reste.
Messages postés
91
Date d'inscription
dimanche 18 août 2002
Statut
Membre
Dernière intervention
21 février 2015

Bon, ce n'est pas tout-à-fait ça.
Nous avons utilisé des constructeurs différents, et le comportement de la DataView est différent selon le constructeur utilisé. Si je ne m'abuse tu t'es surtout intéressé au filtre, ce qui fait que les particularités concernant le tri ne t'ont pas perturbé.
Apparemment, la (ou en tout cas une) bonne tactique pour trier une table consiste à déclarer la DataView avec juste en premier argument le clône de la table, pour chaque enregistrement créer une occurrence de la DataView par AddNew, copier les valeurs de chaque champ sur cette nouvelle occurrence, et pour finir, après cette boucle, initialiser la propriété Sort de la DataView. Dans le test que j'ai rapidement fait je n'ai renseigné que le champ qui sert au tri, mais ça me paraît une voie prometteuse.
ça laisserait entendre un bug au niveau du constructeur de DataView comportant directement un champ de tri ?
Messages postés
91
Date d'inscription
dimanche 18 août 2002
Statut
Membre
Dernière intervention
21 février 2015

Bon, si je comprends bien on ne peut pas programmer pareil les deux versions, alors ...
Afficher les 18 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.