Sérialization d'un listview

Signaler
Messages postés
3
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
12 novembre 2005
-
inxday
Messages postés
8
Date d'inscription
jeudi 22 juillet 2004
Statut
Membre
Dernière intervention
13 mai 2005
-
Bonjour,

J'essaye de faire une 'sauvegarde' du contenu d'un listView au moyen d'une 'xmlSerialization' ...

Mais j'y arrive pas ... Quelqu'un d'entre vous arrive-t-il à faire se genre de sauvegarde par ce moyen ou un autre ???

D'avance merci à ceux qui m'aideront (et à ceux qui aurait bien voulu mais qui rame un peu, comme moi ;-)

Geoffroy

14 réponses

Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
45
Salut,
Pour pouvoir sérializer un object, il faut que la class soit marquée Serializable (avec l'attribut [Serializable()]). Si ce n'est pas le cas, tu dois écrire ta propre méthode de sérialization qui fera le travail. Pour des détails supplémentaires, je te renvoie au nombreux codes parlant de ce sujet sur ce site....
PS : Si juste certaine infos t'intéresse dans ton listView, tu peux créer une nouvelle classe avec l'attribut [Serializable()] et y stocker ce que tu veux, puis sérializer cet object au lieu de ton listView, si réellement c'est pas faisable ()

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
80
Salut,

En plus sérialiser le contrôle lui même je ne pense pas que ce soit une bonne idée.
Par contre tu devrais pouvoir sauvegarder ses items en les récupérant sous forme de collection ou tableau de ListViewItem et en te servant de AddRange pour les "recharger".

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
8
Date d'inscription
jeudi 22 juillet 2004
Statut
Membre
Dernière intervention
13 mai 2005

Tout d'abord merci ...



J'ai lu ce qu'ils disent sur MSDN et effectivement il doit être
possible de créer une objet contenant un tableau dans lequel on peut
mettre les item du listview au moyen de ListViewItemCollection.CopyTo(
array, index); Et de serializer cet objet ...



Vous ai-je bien compris ???

- si je met le tableau en public, je peux le serializer telquel ???



Geoffroy



Ps : le but final est d'obtenir une classe PersoListView(); qui est editable et auto-sauvegardable, je suis parti de cet article pour la partie éditable (arrangé à ma sauce).
Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
80
Ouep :-)

Mais tu n'as pas forcement besoin d'un niveau d'accessibilité public.
D'aileurs logiquement tu fais l'extraction du tableau d'items au moment de la sérailisation, donc dans la même méthode.

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
8
Date d'inscription
jeudi 22 juillet 2004
Statut
Membre
Dernière intervention
13 mai 2005

Salut,



Heeee, ben je vais voir ça alors plus en profondeur, mais j'avais lu
que la serialisation xml ne pouvant se faire que sur des éléments
public ... En même temps, je pense avoir vu un article sur la
serialization des array's qui pourra peut être m'être utile ...



En tout cas, je remercie la communauté C# qui m'est d'un grand secours
pour mon petit problème ( en particulier je fais un grand cocorico ;-)
) et je mettrai le résultat de mes recherches et l'aboutissement de mon
travail le plus rapidement possible en ligne.



Geoffroy
Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
80
Dans le cas de la sérialisation d'une instance de classe (ou structure) oui, seuls ses membres public peuvent être sérialisés, mais l'instance de la classe elle même n'as pas besoin de l'être, du moment qu'elle a un niveau d'accessibilité suffisant pour etre accessible à l'endroit où s'effectue la serialisation.

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
8
Date d'inscription
jeudi 22 juillet 2004
Statut
Membre
Dernière intervention
13 mai 2005

Ok je commence à comprendre ,



J'ai avancé dans mes recherche, je vais travailler en serialisant un
listViewItem, et j'ajouterai ce qu'il faut pour ajouter le nombre de
colonnes et le titre de celles-ci dans le fichier.



Cependant c'est dommage que ce ne soit pas "natif" ...



Encore merci, et bientôt un article avec source pour prolonger la liste ...



Geoffroy
Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
80
"Cependant c'est dommage que ce ne soit pas "natif" ..."
d'un autre côté on n'a pas besoin de ce genre de fonctionnalité tous les jours sur un listview :-)

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
8
Date d'inscription
jeudi 22 juillet 2004
Statut
Membre
Dernière intervention
13 mai 2005

Heeeee, bon ça va ...



Cependant, mon premier prog en C# en a besoin, à moins que j'ai
encore réussi à compliqué alors qu'on peut faire simple ??? De
toute façon, le plus simple pour faire une liste de course, c'était de
prendre un bout de papier et un crayon avec une gomme ;-) On dira
que c'est pour la beauté du code ....



Geoffroy
Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
80
Ba theoriquement ton listview ne doit te servir qu'a afficher les données, pas servir de conteneur.
Donc tu devrais serialiser/deserialiser le "conteneur" (ArrayList etc) et recharger le listview avec.
Tu as peut etre l'architecture de l'appli à revoir :-)

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
8
Date d'inscription
jeudi 22 juillet 2004
Statut
Membre
Dernière intervention
13 mai 2005

Salut Coq, salut les autres,



Tu as probablement raison, mais étant entièrement autodidacte, on
ne m'a jamais appris la "bonne" méthode ... je vais dans le sens où les
choses me font aller ...



Quand tu parles d'un arraylist, tu veux dire une liste liée ??? parce
qu'effectivement ça devrait le faire mais j'ai pas trop envie d'écrire
une classe de list liée, ni de me servir d'un code tier que je
comprends à moitier ... et de ramer la dedans en plus ...



(Rmq : Ca marche comment les pointeurs en c# ???)



Finalement, j'hérite un listview, (qui comprend un listviewitem ( sans
doute une sorte de listliée simplifiée )) j'y ajoute un tableau
avec les titres des colonnes et je serialize/deserialize le tout
. C'est sans doute pas une conception très pro, je te le concède, mais
ce n'est que pour faire une petite appli perso et progresser ( toutes
les bonnes idées m'intéressent donc ... Faites de moi un guru ;-)
Et si ça marche, peut-on vraiment dire que c'est pas la bonne méthode
?? Je me suis laisser dire que le plus intéressant était l'objectif et
non les moyens mis en oeuvre (je parle de petites applications peu
gourmande en cpu , mémoire ...)



Voila donc un long discourt pour dire que je suis ouvert à tout, mais
que j'ai assez peu de connaissance en fait ( encore moins en c# -
1er prog - je vient de delphi et c/c++ en mode console ).



Geoffroy
Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
80
Ca tombe bien, moi aussi je suis complètement autodidacte.
Je parlais de la classe ArrayList du framework.
Tu devrais jeter un oeil aux classes des namespaces System.Collections et System.Collections.Specialized, y'a plein de trucs sympa ;-)

PS : les pointeurs oublie les, sauf cas bien précis qui demandent des perfs impossible à obtenir en managé et nécessitant du code unsafe.

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
8
Date d'inscription
jeudi 22 juillet 2004
Statut
Membre
Dernière intervention
13 mai 2005

Salut coq,



Un grand merci pour ces infos, je suis en train de lire et il y a beaucoup de choses intéressantes dans tes liens !!!



Plus on en sait et plus on sait qu'on ne sait rien ...



Geoffroy
Messages postés
8
Date d'inscription
jeudi 22 juillet 2004
Statut
Membre
Dernière intervention
13 mai 2005

Salut tout le monde,
comme prévu, j'ai ajouté un tutoriel sur la sérialization d'un listview avec entête ...

http://www.csharpfr.com/tutorial.aspx?ID=112

Si vous avez des commentaires, n'hésitez pas ... Je suis toujours prêt à apprendre de mes erreurs ...

Finalement je remercie Coq pour ses conseils, même si finalement je ne me suis pas servi d'arraylist, ni de collection. C'est pas perdu pour autant au contraire !

Geoffroy