Serializer une arborescence treeview

Soyez le premier à donner votre avis sur cette source.

Snippet vu 19 824 fois - Téléchargée 25 fois

Contenu du snippet

Bonjour, j'ai dernièrement voulu sérialiser les Nodes d'une Treeview et je suis tombé sur un sujet assez épineux. En effet la classe TreeNodeCollection (qui contient des objets TreeNode) ne se sérialize pas, et encore moins en Xml. Du coup, j'ai rusé en sauvegardant tous les noeuds dans un ArrayList(eq Vector), car la classe TreeNode est sérializable et la classe ArrayList aussi !

Source / Exemple :


using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;

private void SauveTreeView(TreeView treeView, string FileName)
{
     ArrayList ListeNoeuds = new ArrayList();  //instanciation de la liste
     FileStream fichier = File.OpenWrite(FileName); //Ouverture du fichier en écriture

     BinaryFormatter serializer = new BinaryFormatter(); // instanciation du serializeur binaire

     foreach (TreeNode noeud in (treeView.Nodes)) //ajout de chaque noeud dans la liste
     {
          ListeNoeuds.Add(noeud);
     }

     serializer.Serialize(fichier, ListeNoeuds); // Serialization de la liste dans le fichier
     fichier.Close(); //Fermeture du fichier
}

private void ChargeTreeView(TreeView treeView, string FileName)
{

     FileStream fichier = File.OpenRead(FileName); //ouverture du fichier à charger
     BinaryFormatter serializer = new BinaryFormatter();// instanciation du serializeur binaire

     treeView.Nodes.Clear(); //efface tout les noeuds de l'arborescence
     treeView.BeginUpdate(); //à mettre avant l'ajout de beaucoup de noeuds

     ArrayList ListeNoeuds = (ArrayList)serializer.Deserialize(fichier); //Deserialisation dans la liste

     foreach (TreeNode node in ListeNoeuds) //ajout de chaque noeud dans l'arborescence
     {
          treeView.Nodes.Add(node);
     }

     treeView.EndUpdate(); //à mettre après l'ajout
     fichier.Close(); //Fermeture du fichier

}

A voir également

Ajouter un commentaire

Commentaires

TsukiShiro
Messages postés
2
Date d'inscription
jeudi 15 mai 2008
Statut
Membre
Dernière intervention
15 mai 2008

heu ouai j'ai pas mis <sérializable> devant -_- l'erreure...
Heuresement que je suis débutant sinon j'me le pardonnerait pas xD
Merci beaucoup sa à bien l'air de marcher =)
cs_poppyto
Messages postés
540
Date d'inscription
dimanche 29 décembre 2002
Statut
Modérateur
Dernière intervention
13 mai 2011

Il faut que l'objet dans .tag soit serializable ( this.userData.GetType().IsSerializable ) et faire le nécessaire s'il ne l'est pas...
TsukiShiro
Messages postés
2
Date d'inscription
jeudi 15 mai 2008
Statut
Membre
Dernière intervention
15 mai 2008

Salut poppyto merci pour t'as source. je débute en vb.net et ça m'as beaucoup aidé à piger la sérialisation.

J'ai trouvé la traduction vb.net de ta source (même les commentaires sont les mêmes xD)mais voila, seul les nom des noeuds sont sauvé ainsi que les relations parent/enfant, je ne retrouve pas le .tag du treeview dans le fichier bin.
A la désérialisation j'ai donc des noeuds vides avec juste un nom =(.

J'ignore si cela vient du langage ou d'autre chose merci d'avance de votre aide.
surfzoid
Messages postés
467
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
21 avril 2010

Merci.
cs_poppyto
Messages postés
540
Date d'inscription
dimanche 29 décembre 2002
Statut
Modérateur
Dernière intervention
13 mai 2011

Essaye de voir avec la classe XmlSerializer ^^

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.