C#.net--xml与Treeview

最近做了个课程大作业---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)

<阳光市教育局 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(""); } else if (xmlDoc != null) { openXML(); XmlNode root = xmlDoc.GetElementsByTagName("职能部门")[0]; //在指定节点后面添加节点 XmlElement xe1 = xmlDoc.CreateElement(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的知识,等真正学会再说啦。

 

你可能感兴趣的:(DataBase)