C#.net–xml與Treeview

來源:互聯網
上載者:User

最近做了個課程大作業---web人事管理系統。

 

其中涉及到了xml資料互動的知識,現在記錄下來作為讀書筆記。

 

一。首先是在C#.net中將Treeview與xml節點資料繫結,準確來說是讀取xml資料,產生樹狀圖顯示出來。

下面是代碼與解釋

(1)包含庫

using System.Web;</p><p>using System.Web.UI;</p><p>using System.Xml;</p><p>

(2)開啟xml檔案

private static XmlDocument xmlDoc;</p><p>private void openXML()<br />{<br /> xmlDoc = new XmlDocument();<br /> xmlDoc.Load(Server.MapPath("department.xml")); //Server.MapPath("")擷取絕對路徑,有幾種方法<br />}<br />

 

(3)使用遞迴方法,將xml節點填入到treeview中

private void expandTree()<br /> {<br /> try<br /> {<br /> numofChild = 0;</p><p> if(xmlDoc==null)openXML();</p><p> //初始化Treeview<br /> TreeView2.Nodes.Clear();<br /> TreeView2.Nodes.Add(new TreeNode(xmlDoc.DocumentElement.Name));</p><p> TreeNode tNode = new TreeNode();<br /> tNode = TreeView2.Nodes[0]; </p><p> // 將xml節點填入treeview相應位置<br /> AddNode(xmlDoc.DocumentElement, tNode);<br /> TreeView2.ExpandAll();</p><p> }<br /> catch (XmlException xmlEx)<br /> {<br /> throw xmlEx;<br /> }<br /> catch (Exception ex)<br /> {<br /> throw ex;<br /> }<br /> }</p><p> private void AddNode(XmlNode inXmlNode, TreeNode inTreeNode) //遞迴遍曆<br /> {<br /> XmlNode xNode;<br /> TreeNode tNode;<br /> XmlNodeList nodeList;<br /> int i;</p><p> // 遍曆所有XML nodes直到到達葉子節點.<br /> // 在迴圈過程中將節點添加到treeview中<br /> if (inXmlNode.HasChildNodes)<br /> {<br /> nodeList = inXmlNode.ChildNodes;<br /> for(i = 0; i<=nodeList.Count - 1; i++)<br /> {<br /> xNode = inXmlNode.ChildNodes[i];<br /> inTreeNode.ChildNodes.Add(new TreeNode(xNode.Name));<br /> inTreeNode.Value = xNode.Attributes["value"].Value;</p><p> tNode = inTreeNode.ChildNodes[i];<br /> AddNode(xNode, tNode);<br /> }<br /> }<br /> else<br /> {<br /> // 到達葉子節點<br /> inTreeNode.Text = (inXmlNode.Name).Trim();<br /> inTreeNode.Value = inXmlNode.Attributes["value"].Value;<br /> if (int.Parse(inTreeNode.Value)>0)numofChild++; //記錄節點數目,此步是本次實驗需要而額外記錄的<br /> }<br /> }

 

二。單擊TreeView節點,另一個panel上的label顯示相應的文本

 

(1)

簡單起見,這裡將xml簡化:(department.xml)

<?xml version="1.0" encoding="utf-8"?><br /><陽光市教育局 value="-1"></p><p> <教育局概況 value ="0"></p><p> </教育局概況></p><p> <職能部門 value="-1"><br /> <辦公室 value="1" /><br /> <人事科 value="2" /><br /> <基礎教育科 value="3" /><br /> <計財科 value="4" /><br /> <紀檢監察內審室科 value="5" /><br /> <督導室 value="6" /><br /> <教育工會 value="7" /><br /> <招生辦 value="8" /><br /> <工農辦 value="9" /><br /> <勤管站 value="10" /><br /> <教研室 value="11" /><br /> </職能部門></p><p></陽光市教育局>

 

每單擊一次Treeview的節點,將會從節點中得到不同的節點屬性值(例子中屬性為"value")。

然後在同一工程檔案夾下面儲存了命名與屬性值相對應的txt檔案,因此label的文本也將隨著點擊的情況而變化。

 

(2)提供增加節點功能,因此得有建立節點相應文本的txt檔案的方法

protected void creatTxtFile(int i)<br />{<br /> string fpath = AppDomain.CurrentDomain.BaseDirectory + "//edu//" + i + ".txt"; //獲得本機工程檔案夾下目錄edu下的路徑<br /> FileStream se1 = new FileStream(fpath, FileMode.Create, FileAccess.Write);</p><p> StreamWriter sw = new StreamWriter(se1, System.Text.Encoding.Default);<br /> sw.Write(resDescribe.Text, Encoding.Default);//使用預設編碼<br /> sw.Close();<br /> }

 

(3)添加單擊節點的響應函數

protected void Button2_Click(object sender, EventArgs e)<br /> {<br /> if (depName.Text.Trim() == "" || resDescribe.Text.Trim() == "")<br /> {<br /> Response.Write("<mce:script type="text/javascript"><!--<br />window.alert('請把資訊填寫完整' )<br />// --></mce:script>");<br /> }<br /> else if (xmlDoc != null)<br /> {<br /> openXML();<br /> XmlNode root = xmlDoc.GetElementsByTagName("職能部門")[0]; //在指定節點後面添加節點<br /> XmlElement xe1 = xmlDoc.CreateElement(depName.Text);//建立一個<depName.Text>節點<br /> xe1.SetAttribute("value", (++numofChild).ToString());//設定該節點genre屬性<br /> root.AppendChild(xe1);//添加到<>節點中 </p><p> xmlDoc.Save(Server.MapPath("department.xml")); //修改並儲存xml資料</p><p> creatTxtFile(numofChild);<br /> expandTree();<br /> xmlDoc = null;<br /> depName.Enabled = false; //depName,resDescribe為介面控制項textbox<br /> resDescribe.Enabled = false;<br /> }<br /> }

 

(4)至於如何讀取文本資料,這裡就不多介紹了.

同時這裡並沒有解決如何才能實現局部重新整理頁面的問題,要用到Ajax的知識,等真正學會再說啦。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.