在C#的应用开发中,TreeView控件是一种比较常用的控件,主要反映了父子节点之间的关系,由于TreeView控件与XML文件的组织结构比较类似,可以把TreeView控件与XML文件结合使用。TreeView控件普通操作,先定义节点,再插入节点,这里就不在赘述。主要介绍TreeView与XML文件一起使用的方法。
1.生成XML文件。
假设现在已经知道各个节点的上下级关系,可以通过递归生成一张树状关系图保存在XML文件中,这里我没有使用严格格式的XML文件,就直接把数据存入XML了,首先先创建TreeView的上下级关系,然后生成XML文件,TreeView控件名字为treeView。
public XElement CreateTreeNodeSaveXML(string NodeName) //传入树状关系图的根节点名字 { XElement xe=new XElement(NodeName); List<string> ChildList=fun(NodeName) <span style="font-family:Times New Roman;"> //获取NodeName下面的子节点的数值存入List<string>之中,</span> foreach (var Child in ChildList) { xe.Add(CreateTreeNodeSaveXML(Child)); } return xe; }
} public void CreateXML() { XElement root= CreateTreeNodeSaveXML("RootNode"); //传入树状图的根节点的值RootNode string SavePath = Path.Combine(Application.StartupPath, @"配置文件/XML.xml"); root.Save(SavePath); }
只需要调用根节点的值就可以生成一张树状图存储到XML文件中
2.读取XML到TreeView控件中,也是通过递归函数实现这个功能
注意读取XML文件到TreeView中,XML不能含有特殊字符,比如像“(”,“)”括号字符或者其他特殊字符,传入XML的根节点与TreeView控件的节点即可。
public void bindXmlToTreeView(XmlNodeList nodeList, TreeNodeCollection treeNode) { foreach (XmlNode node in nodeList) { XmlElement xe = (XmlElement)node; TreeNode newTreeNode = new TreeNode(); //定义新的节点 newTreeNode.Text = xe.Name; //XML节点名字给TreeView节点 treeNode.Add(newTreeNode); if (node.HasChildNodes) { bindXmlToTreeView(node.ChildNodes, newTreeNode.Nodes); } } }
在实际调用过程中先读取XML文件,在把XML的根节点选中即可。
XmlDocument xmlDoc = new XmlDocument(); XmlNodeList currentXmlNodeList = null; string LoadPath = Path.Combine(Application.StartupPath, @"配置文件/XML.xml"); xmlDoc.Load(LoadPath); currentXmlNodeList = xmlDoc.SelectNodes("RootNode");//RootNode为XML文件根节点的名字 bindXmlToTreeView(currentXmlNodeList, treeView.Nodes);
3.如果说不愿意使用XML文件,想直接绑定生成TreeView也可以,只需要把返回值改一下即可。
public TreeNode CreateTreeNode(string NodeName) { TreeNode Tr = new TreeNode(NodeName); List<string> ChildList = fun(NodeName);//计算NodeName节点的子节点的值 foreach (var Child in ChildList) { Tr.Nodes.Add(CreateTreeNode(Child)); } return Tr; }在实际调用的过程中调用函数,给定根节点的值,再加载即可。
TreeNode root = CreateTreeNode("RootName"); treeView.Nodes.Add(root);