使用C#实现将XML数据填充到TreeView中

来源:互联网 发布:什么值得买网站源码 编辑:程序博客网 时间:2024/05/06 09:48

 

文档及代码下载:http://www.dingos.cn/index.php?topic=1899.0

介绍

当菜单项是经常改变时,从XML文档中创建TreeView才当是非常有用的。例如,使用XML作为数据库存储记录。
这里有个简单示例。以防混淆这个例子比较简单。

背景

对XML、TreeView控件的应用,在Visual Studio中有助于理解这些步骤。

使用代码

注意:这个解决方案(xml2treeviewmenuSolution)是VS2010创建。
添加一个XML文件到项目中并命名为“menu.xml”。根据菜单项编辑XML文件。

view plaincopy to clipboardprint?
  1. <?xml version="1.0" encoding="utf-8" ?>  
  2. <root>  
  3. <folder title='folder 1a' >  
  4. <record title='record 1a1' />  
  5. <record title='record 1a2' />  
  6. <folder title='folder 1b'>  
  7. <record title='record 1b1' />  
  8. </folder>  
  9. </folder>  
  10. <folder title='folder 2a' >  
  11. <record title='record 2a1' />  
  12. </folder>  
  13. <folder title='folder 3a' >  
  14. <record title='record 3a1' />  
  15. <record title='record 3a2' />  
  16. </folder>  
  17. </root>  
从Visual Studio工具箱中将TreeView控件拖入Windows窗体中。在这个例子,命名控件为“treeViewMenu”。使用using添加对XML类的引用。
view plaincopy to clipboardprint?
  1. using System.Xml;  
  2. using System.Xml.XPath;  
创建一个XMLDocument对象用于保存文件。
view plaincopy to clipboardprint?
  1. public partial class Form1 : Form{  
  2.     private XmlDocument docXML = new XmlDocument();  
当窗体加载时,从XML文件中加载填充TreeView控件的XML文档。 
view plaincopy to clipboardprint?
  1. private void Form1_Load(object sender, EventArgs e){  
  2.     docXML.Load("menu.xml"); // 加载XML文件  
  3.     populateBaseNodes(); // 填充所有根节点  
  4. }  

 从第一级<folder>节点开始填充。将每个根节点添加到树中,并为当前根据点添加子节点。

view plaincopy to clipboardprint?
  1. private void populateBaseNodes(){  
  2.     treeViewMenu.Nodes.Clear(); // 清楚已存在的项  
  3.     treeViewMenu.BeginUpdate(); // 开始更新TreeView  
  4.     TreeNode treenode;  
  5.     treenode = treeViewMenu.Nodes.Add("Folders");  
  6.     XmlNodeList baseNodeList = docXML.SelectNodes("root/folder");  
  7.     // 获得第一层 <folder> 节点  
  8.     foreach (XmlNode xmlnode in baseNodeList){  
  9.     // 变量所有的根节点 <folder> 节点  
  10.         string title = xmlnode.Attributes["title"].Value;  
  11.         treenode = treeViewMenu.Nodes.Add(title); // 添加到树中  
  12.         populateChildNodes(xmlnode, treenode); // 得到子节点  
  13.     }  
  14.     treeViewMenu.EndUpdate(); // 停止更新树  
  15.     treeViewMenu.Refresh(); // 重新显示TreeView  
  16. }  

每个子节点将检查更远的子节点。循环调用每个子节点。

view plaincopy to clipboardprint?
  1. private void populateChildNodes(XmlNode oldXmlnode, TreeNode oldTreenode){  
  2.     TreeNode treenode = null;  
  3.     XmlNodeList childNodeList = oldXmlnode.ChildNodes;  
  4.     // 对上一个节点(父节点)得到所有的子节点  
  5.     foreach (XmlNode xmlnode in childNodeList) {  
  6.     // 循环遍历所有子节点  
  7.         string title = xmlnode.Attributes["title"].Value;  
  8.         // 添加到父节点  
  9.         treenode = oldTreenode.Nodes.Add(title);  
  10.         populateChildNodes(xmlnode, treenode);  
  11.     }  
  12. }  

 

原创粉丝点击