.Net C#将treeView保存到文件的最佳方法?
我正在使用Visual Studio 2013和C#。我正在动态创建一个树视图,并使用添加和删除按钮来创建树 我想知道什么是将treeView节点保存到文件的好方法,以便下次启动应用程序时可以再次动态构建它 我应该使用.ini文件吗。xml?我想看看如何做到这一点的例子。举个小例子就可以了.Net C#将treeView保存到文件的最佳方法?,c#,visual-studio,treeview,C#,Visual Studio,Treeview,我正在使用Visual Studio 2013和C#。我正在动态创建一个树视图,并使用添加和删除按钮来创建树 我想知道什么是将treeView节点保存到文件的好方法,以便下次启动应用程序时可以再次动态构建它 我应该使用.ini文件吗。xml?我想看看如何做到这一点的例子。举个小例子就可以了 谢谢…您可以使用这两种格式来存储数据。无论格式如何,都需要定义一个类,该类的Id表示每个节点,parentId对于根元素可以为null。然后设置元素列表,然后序列化这些元素。序列化对象可以保存为Xml,也可以
谢谢…您可以使用这两种格式来存储数据。无论格式如何,都需要定义一个类,该类的Id表示每个节点,parentId对于根元素可以为null。然后设置元素列表,然后序列化这些元素。序列化对象可以保存为Xml,也可以解析为任何其他格式(如Json),甚至可以是自定义格式(如ini文件) 编辑1 这是一个示例实现。数据结构不是有效的树,但它提供了一个透视图。也许你可以读更多关于树木的书
使用系统;
使用System.Collections.Generic;
使用System.IO;
使用System.Linq;
使用System.Xml.Serialization;
命名空间控制台应用程序1
{
公共静态类程序
{
私有静态void Main()
{
//定义初始树节点。
变量树=新列表
{
新树烯
{
Id=1,
ParentId=null,
Text=“根元素1”
},
新树烯
{
Id=2,
ParentId=null,
Text=“根元素2”
},
新树烯
{
Id=3,
ParentId=1,
Text=“子元素1”
},
新树烯
{
Id=4,
ParentId=3,
Text=“孙子元素1”
}
};
//初始化序列化程序实例。
var xmlSerializer=新的xmlSerializer(tree.GetType());
//序列化列表。(保存到Xml文件中)
使用(var fileStream=File.OpenWrite(“SerializerTest.xml”))
{
序列化(文件流,树);
}
//将存储的Xml文件反序列化为新的树对象。
使用(var fileStream=File.OpenRead(“SerializerTest.xml”))
{
var loadedTree=xmlSerializer.Deserialize(fileStream)为列表;
如果(loadedTree!=null)
{
foreach(loadedTree.Where(x=>x.ParentId==null.ToList()中的var节点)
{
PrintNode(loadedTree,节点);
}
}
}
Console.ReadLine();
}
私有静态void打印节点(列表树、树节点)
{
WriteLine(“Id:{0}-Text:{1}”,node.Id,node.Text);
var children=tree.Where(x=>x.ParentId==node.Id).ToList();
foreach(儿童中的儿童变量)
{
PrintNode(树,子节点);
}
}
}
[可序列化]
公共级树节点
{
公共int Id{get;set;}
public int?ParentId{get;set;}
公共字符串文本{get;set;}
}
}
我会选择XML。。。或者可能是JSONXML,试试这个谢谢你的回答…我如何创建.xml文件作为保存任务?这些链接向我展示了如何加载.xml文件并构建treeView,但是如何保存treeView以获取.xml文件呢?
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; }
}
}