在菜单项经常需要更新的情况下,使用XML文件作为数据库来存储记录是非常有用的。例如,当菜单项需要频繁更新时,可以通过XML文件来实现。本文将提供一个简单的例子,以帮助理解如何实现这一功能。
要理解以下步骤,需要具备XML、TreeView控件以及Visual Studio的基础知识。
注意:附带的解决方案文件(xml2treeviewmenuSolution)是使用VS2010创建的。
将一个XML文件添加到项目中,并命名为"menu.xml"。编辑XML文件,添加菜单项。
<?xml version="1.0" encoding="utf-8"?>
<root>
<folder title='folder 1a'>
<record title='record 1a1'/>
<record title='record 1a2'/>
</folder>
<folder title='folder 1b'>
<record title='record 1b1'/>
</folder>
<folder title='folder 2a'>
<record title='record 2a1'/>
</folder>
<folder title='folder 3a'>
<record title='record 3a1'/>
<record title='record 3a2'/>
</folder>
</root>
从Visual Studio工具箱中拖动TreeView控件到Windows表单上。在这个例子中,将控件命名为"treeViewMenu"。
using System.Xml;
using System.Xml.XPath;
public partial class Form1 : Form
{
private XmlDocument docXML = new XmlDocument();
}
当窗体加载时,加载XML文档,并开始填充TreeView控件。
private void Form1_Load(object sender, EventArgs e)
{
docXML.Load("menu.xml");
populateBaseNodes();
}
填充从第一级<folder>节点开始。在每个基础节点添加到树中之后,为其添加子节点。
private void populateBaseNodes()
{
treeViewMenu.Nodes.Clear();
treeViewMenu.BeginUpdate();
TreeNode treenode;
treenode = treeViewMenu.Nodes.Add("Folders");
XmlNodeList baseNodeList = docXML.SelectNodes("root/folder");
foreach (XmlNode xmlnode in baseNodeList)
{
string title = xmlnode.Attributes["title"].Value;
treenode = treeViewMenu.Nodes.Add(title);
populateChildNodes(xmlnode, treenode);
}
treeViewMenu.EndUpdate();
treeViewMenu.Refresh();
}
每个子节点将被检查是否有进一步的子节点。对于找到的每个子节点,循环将被调用。
private void populateChildNodes(XmlNode oldXmlnode, TreeNode oldTreenode)
{
TreeNode treenode = null;
XmlNodeList childNodeList = oldXmlnode.ChildNodes;
foreach (XmlNode xmlnode in childNodeList)
{
string title = xmlnode.Attributes["title"].Value;
treenode = oldTreenode.Nodes.Add(title);
populateChildNodes(xmlnode, treenode);
}
}