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
19 déc. 2009 à 17:08
19 déc. 2009 à 17:00
19 déc. 2009 à 16:43
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.
19 déc. 2009 à 14:43
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 ?
19 déc. 2009 à 14:14
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.