treeview绑定xml
treeview绑定xml
treeview绑定xmltreeview绑定xml数据的方式
一、XmlDataSource数据源方式
XML文档的访问由XmlDataSource控件来完成,从XmlDataSource控件的DataFile属性中指定XML文档路径,然后在TreeView控件中设置与XML文档中的节点的对应关系。
实现步骤
1、XMLFile。xml文件
<?xml version="1.0" encoding="utf-8" ?>
<contact name="联系人">
<genre name="华南地区">
<person Text="负责人">
<name>张三</name>
<sex>男</sex>
<age>25</age>
<address>广州市黄浦区</address>
</person>
<person Text="负责人">
<name>李四</name>
<sex>男</sex>
<age>28</age>
<address>佛山市南海区</address>
</person>
</genre>
<genre name="华北地区">
<person Text="负责人">
<name>王五</name>
<sex>男</sex>
<age>30</age>
<address>北京市海淀区</address>
</person>
</genre>
</contact>
2、TreeView控件和XmlDataSource控件
从工具箱选择TreeView控件和XmlDataSource控件设计页面,把XmlDataSource控件DataFile属性设置成“~/App_Data/XMLFile。xml”,并把TreeView控件的DataSourceID属性设为“XmlDataSource1”。
<html>
<head runat="server">
<title>TreeView绑定XML示例</title>
</head>
<body>
<form id="form1" runat="server">
<li>
<asp:XmlDataSource ID="XmlDataSource1" runat="server"
DataFile="~/App_Data/XMLFile。xml">
</asp:XmlDataSource>
</li>
<asp:TreeView ID="TreeView1" runat="server"
DataSourceID="XmlDataSource1">
</asp:TreeView>
</form>
</body>
</html>
3、绑定XML
用编程的方式通过TreeNodeBinding对象添加节点与XML文档绑定的对应关系
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
this.TreeView1.ShowLines = true;
//以下是添加节点与数据源绑定的对应关系
TreeNodeBinding contact = new TreeNodeBinding();
contact.DataMember = "contact";//指定绑定的成员
contact.ValueField = "name";//取值的字段
this.TreeView1.DataBindings.Add(contact);
TreeNodeBinding genre = new TreeNodeBinding();
genre.DataMember = "genre";//添加与"地区"绑定
genre.ValueField = "name";
this.TreeView1.DataBindings.Add(genre);
TreeNodeBinding person = new TreeNodeBinding();
person.DataMember = "person";//添加与"负责人"绑定
person.ValueField = "Text";
this.TreeView1.DataBindings.Add(person);
TreeNodeBinding name = new TreeNodeBinding();
name.DataMember = "name";//添加与"名称"绑定
name.ValueField = "#InnerText";
this.TreeView1.DataBindings.Add(name);
TreeNodeBinding sex = new TreeNodeBinding();
sex.DataMember = "sex";//添加与"性别"绑定
sex.ValueField = "#InnerText";
this.TreeView1.DataBindings.Add(sex);
TreeNodeBinding age = new TreeNodeBinding();
age.DataMember = "age";//添加与"年龄"绑定
age.ValueField = "#InnerText";
this.TreeView1.DataBindings.Add(age);
TreeNodeBinding address = new TreeNodeBinding();
address.DataMember = "address";//添加与"地址"绑定
address.ValueField = "#InnerText";
this.TreeView1.DataBindings.Add(address);
}
}
备注
(1)、TreeNodeBinding类在TreeView控件中定义数据项与该数据项绑定到的节点之间的关系。该类的DataMember属性指定在节点显示的数据源对应XML的节点。ValueField属性对应TreeNode对象的Value属性。
(2)、TreeNodeBinding类的Text属性指定向用户显示的文本,如果该属性没有指定,则默认与ValueField属性相同。
(3)、TreeView控件的DataSourceID属性指定数据源控件源ID。
二、用循环方式添加节点到TreeView树中
实现步骤
1、添加包含库
using System.Web;
using System.Web.UI;
using System.Xml;
2、打开xml文件
private static XmlDocument xmlDoc;
private void openXML()
{
xmlDoc = new XmlDocument();
xmlDoc.Load(Server.MapPath("department。xml")); //Server.MapPath("")获取绝对路径,有几种方法
}
3、使用递归方法,将xml节点填入到treeview中
private void expandTree()
{
try
{
numofChild = 0;
if(xmlDoc==null)openXML();
//初始化Treeview
TreeView2.Nodes.Clear();
TreeView2.Nodes.Add(new TreeNode(xmlDoc.DocumentElement.Name));
TreeNode tNode = new TreeNode();
tNode = TreeView2.Nodes[0];
// 将xml节点填入treeview相应位置
AddNode(xmlDoc.DocumentElement, tNode);
TreeView2.ExpandAll();
}
catch (XmlException xmlEx)
{
throw xmlEx;
}
catch (Exception ex)
{
throw ex;
}
}
private void AddNode(XmlNode inXmlNode, TreeNode inTreeNode) //递归遍历
{
XmlNode xNode;
TreeNode tNode;
XmlNodeList nodeList;
int i;
// 遍历所有XML nodes直到到达叶子节点.
// 在循环过程中将节点添加到treeview中
if (inXmlNode.HasChildNodes)
{
nodeList = inXmlNode.ChildNodes;
for(i = 0; i<=nodeList.Count - 1; i++)
{
xNode = inXmlNode.ChildNodes[i];
inTreeNode.ChildNodes.Add(new TreeNode(xNode.Name));
inTreeNode.Value = xNode.Attributes["value"].Value;
tNode = inTreeNode.ChildNodes[i];
AddNode(xNode, tNode);
}
}
else
{
// 到达叶子节点
inTreeNode.Text = (inXmlNode.Name).Trim();
inTreeNode.Value = inXmlNode.Attributes["value"].Value;
if (int.Parse(inTreeNode.Value)>0)numofChild++; //记录节点数目,此步是本次实验需要而额外记录的
}
}
热门推荐
- nginx tomcat集群(Nginx+tomcat负载均衡集群的实现方法)
- docker中运行项目的配置(Docker中搭建配置Git环境的过程)
- django常用模块(django celery redis使用具体实践)
- js解除网页屏蔽(js检测标题与描述中的关键词发现就替换或跳转到别的页面)
- axios原理和实现(GitHub上77.9K的Axios项目有哪些值得借鉴的地方详析)
- iframe标签教程(关于解决iframe标签嵌套问题的解决方法)
- mysql8.0.15安装详细教程(Mysql8.0.22解压版安装教程小白专用)
- 怎么查询端口是否被占用(如何查看某个端口被谁占用)
- js网站前端效果(JS如何让你的移动端交互体验更加优秀)
- html如何给table加边框(HTML table 表格边框的实现思路)