【问题标题】:.Net C# best way to save treeView to file?.Net C# 将 treeView 保存到文件的最佳方法?
【发布时间】:2016-04-15 05:59:41
【问题描述】:

我正在使用 Visual Studio 2013 和 C#。我正在动态创建 TreeView 并具有添加和删除按钮来创建树。

我想知道将 treeView 节点保存到文件中以便在应用程序下次启动时再次动态构建它的好方法是什么?

我应该使用 .ini 文件吗? .xml?我想看一个如何做到这一点的例子。一个小例子就可以了。

谢谢...

【问题讨论】:

  • 我会选择 XML... 或者 JSON
  • XML,试试这个answer

标签: c# visual-studio treeview


【解决方案1】:

您可以使用这两种格式来存储数据。无论格式如何,您都需要定义一个类,其 Id 表示每个节点,而 parentId 对于根元素可以为 null。比你应该设置一个元素列表然后序列化它们。序列化后的对象可以保存为 Xml,也可以解析成 Json 等任何其他格式,甚至是 ini 文件等自定义格式。

编辑 1

这是一个示例实现。数据结构不是有效的树,但它为您提供了一个视角。也许你可以阅读更多关于树木的信息here

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Xml.Serialization;

namespace ConsoleApplication1
{
    public static class Program
    {
        private static void Main()
        {
            // Define your initial tree nodes.
            var tree = new List<TreeNode>
            {
                new TreeNode
                {
                    Id = 1,
                    ParentId = null,
                    Text = "Root Element 1"
                },
                new TreeNode
                {
                    Id = 2,
                    ParentId = null,
                    Text = "Root Element 2"
                },
                new TreeNode
                {
                    Id = 3,
                    ParentId = 1,
                    Text = "Child Element 1"
                },
                new TreeNode
                {
                    Id = 4,
                    ParentId = 3,
                    Text = "Grandchild Element 1"
                }
            };

            // Initialize serializer instance.
            var xmlSerializer = new XmlSerializer(tree.GetType());

            // Serialize your list. (Save into Xml File)
            using (var fileStream = File.OpenWrite("SerializerTest.xml"))
            {
                xmlSerializer.Serialize(fileStream, tree);
            }

            // Deserialize your stored Xml file into a new tree object.
            using (var fileStream = File.OpenRead("SerializerTest.xml"))
            {
                var loadedTree = xmlSerializer.Deserialize(fileStream) as List<TreeNode>;
                if (loadedTree != null)
                {
                    foreach (var node in loadedTree.Where(x => x.ParentId == null).ToList())
                    {
                        PrintNode(loadedTree, node);
                    }
                }
            }

            Console.ReadLine();
        }

        private static void PrintNode(List<TreeNode> tree, TreeNode node)
        {
            Console.WriteLine("Id: {0} - Text: {1}", node.Id, node.Text);
            var children = tree.Where(x => x.ParentId == node.Id).ToList();
            foreach (var child in children)
            {
                PrintNode(tree, child);
            }
        }
    }

    [Serializable]
    public class TreeNode
    {
        public int Id { get; set; }
        public int? ParentId { get; set; }
        public string Text { get; set; }
    }
}

【讨论】:

  • 感谢您的回答...如何将 .xml 文件创建为保存任务?这些链接向我展示了如何加载 .xml 文件并构建 treeView,但是如何保存 treeView 以获取 .xml 文件?
猜你喜欢
  • 2012-02-07
  • 1970-01-01
  • 1970-01-01
  • 2014-07-12
  • 1970-01-01
  • 1970-01-01
  • 2013-09-22
  • 2015-08-23
  • 2012-12-24
相关资源
最近更新 更多