C#.net--xml与Treeview

本文介绍了一种在C#中使用XML数据填充TreeView的方法,并实现了单击节点更新Panel上Label的功能。文中详细展示了如何通过递归遍历XML文档并将数据绑定到TreeView,同时还提供了增加节点的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近做了个课程大作业---web人事管理系统。

其中涉及到了xml数据交互的知识,现在记录下来作为读书笔记。

一。首先是在C#.net中将Treeview与xml节点数据绑定,准确来说是读取xml数据,生成树状图显示出来。

下面是代码与解释

(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++; //记录节点数目,此步是本次实验需要而额外记录的 } }

二。单击TreeView节点,另一个panel上的label显示相应的文本

(1)

简单起见,这里将xml简化:(department.xml)

<?xml version="1.0" encoding="utf-8"?> <阳光市教育局 value="-1"> <教育局概况 value ="0"> </教育局概况> <职能部门 value="-1"> <办公室 value="1" /> <人事科 value="2" /> <基础教育科 value="3" /> <计财科 value="4" /> <纪检监察内审室科 value="5" /> <督导室 value="6" /> <教育工会 value="7" /> <招生办 value="8" /> <工农办 value="9" /> <勤管站 value="10" /> <教研室 value="11" /> </职能部门> </阳光市教育局>

每单击一次Treeview的节点,将会从节点中得到不同的节点属性值(例子中属性为"value")。

然后在同一工程文件夹下面存储了命名与属性值相对应的txt文件,因此label的文本也将随着点击的情况而变化。

(2)提供增加节点功能,因此得有创建节点相应文本的txt文件的方法

protected void creatTxtFile(int i) { string fpath = AppDomain.CurrentDomain.BaseDirectory + "//edu//" + i + ".txt"; //获得本机工程文件夹下目录edu下的路径 FileStream se1 = new FileStream(fpath, FileMode.Create, FileAccess.Write); StreamWriter sw = new StreamWriter(se1, System.Text.Encoding.Default); sw.Write(resDescribe.Text, Encoding.Default);//使用默认编码 sw.Close(); }

(3)添加单击节点的响应函数

protected void Button2_Click(object sender, EventArgs e) { if (depName.Text.Trim() == "" || resDescribe.Text.Trim() == "") { Response.Write("<mce:script type="text/javascript"><!-- window.alert('请把信息填写完整' ) // --></mce:script>"); } else if (xmlDoc != null) { openXML(); XmlNode root = xmlDoc.GetElementsByTagName("职能部门")[0]; //在指定节点后面添加节点 XmlElement xe1 = xmlDoc.CreateElement(depName.Text);//创建一个<depName.Text>节点 xe1.SetAttribute("value", (++numofChild).ToString());//设置该节点genre属性 root.AppendChild(xe1);//添加到<>节点中 xmlDoc.Save(Server.MapPath("department.xml")); //修改并保存xml数据 creatTxtFile(numofChild); expandTree(); xmlDoc = null; depName.Enabled = false; //depName,resDescribe为界面控件textbox resDescribe.Enabled = false; } }

(4)至于如何读取文本数据,这里就不多介绍了.

同时这里并没有解决如何才能实现局部刷新页面的问题,要用到Ajax的知识,等真正学会再说啦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值