11 votes

Sauvegarder le contenu d'un treeview dans un fichier et le charger plus tard

Dans mon programme C# WinForms, j'ai un treeview qui ne contient que des nœuds parent (donc, pas d'enfants), c'est comme une listbox mais je en avais besoin en raison des différentes propriétés des nœuds comme le Nom, le Tag et le Texte.

Maintenant, je veux pouvoir enregistrer le contenu de ce treeview dans un fichier (basiquement un fichier texte que j'appelle *.MVIA). La question est quel est le meilleur moyen de sauvegarder les trois propriétés des nœuds dans un fichier afin de pouvoir les charger de manière appropriée plus tard ?

Pour l'instant, j'ai eu cette idée :

    private void menuFileSave_Click(object sender, EventArgs e)
    {
        StringBuilder sb = new StringBuilder();

        foreach(TreeNode node in treeViewFiles.Nodes)
        {
            sb.AppendLine(node.Name);
        }

        SaveFileDialog saveList = new SaveFileDialog();

        saveList.DefaultExt = "*.mvia";
        saveList.Filter = "Fichiers MVIA|*.mvia";

        if (saveList.ShowDialog() == DialogResult.OK)
        {
            File.WriteAllText(saveList.FileName, sb.ToString());
        }            
    }

Comme vous pouvez le voir, chaque propriété Nom de chaque nœud sera enregistrée sur une ligne. Maintenant, je dois ajouter sa propriété Texte et Tag aussi, mais plus tard j'ai des problèmes pour les lire à nouveau (Honnêtement, je ne sais pas comment faire).

Pourriez-vous me donner des idées sur le meilleur moyen de sauvegarder les trois propriétés de chaque nœud et pouvoir les charger facilement plus tard ?

Merci.

23voto

Stecya Points 12073

Vous pouvez utiliser BinaryFormatter pour sérialiser / désérialiser des nœuds

    public static void SaveTree(TreeView tree, string filename)
    {
        using (Stream file = File.Open(filename, FileMode.Create))
        {
            BinaryFormatter bf = new BinaryFormatter();
            bf.Serialize(file, tree.Nodes.Cast().ToList());
        }
    }

    public static void LoadTree(TreeView tree, string filename)
    {
        using (Stream file = File.Open(filename, FileMode.Open))
        {
            BinaryFormatter bf = new BinaryFormatter();
            object obj = bf.Deserialize(file);

            TreeNode [] nodeList = (obj as IEnumerable).ToArray();
            tree.Nodes.AddRange(nodeList);
        }
    }

0voto

Je suppose que ce n'est pas fermé mais je n'ai jamais compris l'idée d'utiliser une base de données pour tout sauf le Treeview. Pourquoi ne pas simplement le stocker dans une base de données, comme vous le feriez pour un DataGridView, et tout le reste? Sinon, vous perdez un peu la puissance qui vient du fait de conserver les données dans une base de données.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X