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

0/5 (18 avis)

Snippet vu 21 585 fois - Téléchargée 31 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
cs_JoBleu Messages postés 91 Date d'inscription dimanche 18 août 2002 Statut Membre Dernière intervention 21 février 2015
19 déc. 2009 à 17:08
Ah au fait encore une chose : merci à Patrice, sans qui je n'aurais probablement pas trouvé.
cs_JoBleu Messages postés 91 Date d'inscription dimanche 18 août 2002 Statut Membre Dernière intervention 21 février 2015
19 déc. 2009 à 17:00
Ah au fait ça y est j'ai envoyé le retour à Microsoft.
cs_JoBleu Messages postés 91 Date d'inscription dimanche 18 août 2002 Statut Membre Dernière intervention 21 février 2015
19 déc. 2009 à 16:43
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.
cs_JoBleu Messages postés 91 Date d'inscription dimanche 18 août 2002 Statut Membre Dernière intervention 21 février 2015
19 déc. 2009 à 14:43
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 ?
cs_JoBleu Messages postés 91 Date d'inscription dimanche 18 août 2002 Statut Membre Dernière intervention 21 février 2015
19 déc. 2009 à 14:14
Bon, si je comprends bien on ne peut pas programmer pareil les deux versions, alors ...

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.