自訂 XML 檔案在 TreeView 控制項中的使用

來源:互聯網
上載者:User

在 Asp.Net 中,可以很方便地使用由微軟提供的 Internet Exploer Web Controls 控制項來實現樹形列表。由微軟提供的這套控制項集合中包括有 MultiPage,TabStrip,Toolbar,Treeview 四個控制項。

關於這幾個控制項的使用在微軟的網站由詳細的說明(參見:http://www.microsoft.com/china/msdn/archives/library/dnaspp/html/aspnet-usingtreeviewiewebcontrol.asp; http://msdn.microsoft.com/library/default.asp?url=/workshop/webcontrols/overview/overview.asp)。

在微軟提供的文檔中 Treeview 控制項支援 XML 檔案作為資源檔(XML 檔案的結構本來就是一種樹型結構),關於在 Treeview 控制項中如可使用 XML 檔案,很多資料有詳細的介紹(http://www.yesky.com/SoftChannel/72342380468043776/20040630/1825811.shtml),本文介紹的則是用另外一種方式解析 XML 檔案到 Treeview 控制項中。

因為該方法是我在沒有找到資料的情況下為了方便使用該控制項而自行寫的一個處理過程,其實在使用的時候已經大不可必,寫出來,只是出於共同學習的目的。

在拿到這個控制項的時候,我對其使用方法是不大瞭解的,但為了讓自己在以後的程式中能夠較為方便的使用之,所以我決定採用使用 XML 檔案的方式以儲存節點資訊,所以首先我構建了一個 XML 檔案基本格式:

<?xml version="1.0" encoding="UTF-8"?>
<treeview>
 <nodes>
  <text>根節點</text>
  <link></link>
  <target>_self</target>
  <description></description>
  <node>
   <text>測試節點 -1</text>
   <link>/test1.aspx</link>
   <target>MainFrame</target>
   <description></description>
  </node>
  <node>
   <text>測試節點 - 2</text>
   <link>/test2.aspx</link>
   <target>_top</target>
   <description></description>
  </node>
 </nodes>
</treeview>

treeview 為根結點,nodes 為父級節點,node 為子節點。其中 nodes 可以嵌套,可以並行,node 只能並行。在定義好結構後,最主要的就是如何解析了。下面是具體的代碼:

  ///

  /// TreeViewParse TreeView解析器,從XML檔案中讀取節點值
  /// document XML文檔
  /// treeView Microsoft.Web.UI.WebControls.TreeView
  ///

  private void TreeViewParse(System.Xml.XmlNode document, Microsoft.Web.UI.WebControls.TreeView treeView)
  {
   if(document.Name != "treeview") return;
   foreach(System.Xml.XmlNode node in document.ChildNodes)
   {
    if(node.Name != "nodes") return;
    this.NodesParse(node, treeView, null);
   }
  }

  ///

  /// NodesParse Nodes解析器,從XML檔案中讀取主節點值
  /// document XML文檔
  /// treeView Microsoft.Web.UI.WebControls.TreeView
  /// treeNode 父級節點
  ///

  private void NodesParse(System.Xml.XmlNode document, Microsoft.Web.UI.WebControls.TreeView treeView, Microsoft.Web.UI.WebControls.TreeNode treeNode)
  {
   if(document.Name != "nodes") return;
   Microsoft.Web.UI.WebControls.TreeNode child = new Microsoft.Web.UI.WebControls.TreeNode();
   foreach(System.Xml.XmlNode node in document.ChildNodes)
   {
    string name = (node.Name != null ? node.Name : "");
    // child.ID = node.Name + "_" + treeView.Nodes.Count.ToString();
    switch(name.Trim().ToLower())
    {
     case "text":
      child.Text = node.InnerText;
      break;
     case "link":
      child.NavigateUrl = node.InnerText;
      break;
     case "target":
      child.Target = node.InnerText;
      break;
     case "nodes":
      NodesParse(node, treeView, child);
      break;
     case "node":
      NodeParse(node, treeView, child);
      break;
    }
   }
   if(treeNode == null) treeView.Nodes.Add(child);
   else treeNode.Nodes.Add(child);
  }

  ///

  /// NodeParse Node解析器,從XML檔案中讀取子節點值
  /// document XML文檔
  /// treeView Microsoft.Web.UI.WebControls.TreeView
  /// treeNode 父級節點
  ///

  private void NodeParse(System.Xml.XmlNode document, Microsoft.Web.UI.WebControls.TreeView treeView, Microsoft.Web.UI.WebControls.TreeNode treeNode)
  {
   Microsoft.Web.UI.WebControls.TreeNode child = new Microsoft.Web.UI.WebControls.TreeNode();
   foreach(System.Xml.XmlNode node in document.ChildNodes)
   {
    string name = (node.Name != null ? node.Name : "");
    switch(name.Trim().ToLower())
    {
     case "text":
      child.Text = node.InnerText;
      break;
     case "link":
      child.NavigateUrl = node.InnerText;
      break;
     case "target":
      child.Target = node.InnerText;
      break;
     case "nodes":
      NodesParse(node, treeView, child);
      break;
    }
   }
   treeNode.Nodes.Add(child);
  }

以下是使用方法:

  private Microsoft.Web.UI.WebControls.TreeView MSTreeView = new Microsoft.Web.UI.WebControls.TreeView();
   System.Xml.XmlDocument document = new System.Xml.XmlDocument(); //
   document.Load(System.Web.HttpContext.Current.Server.MapPath(this.XmlDocument));
   MSTreeView.Nodes.Clear();
   TreeViewParse(document.DocumentElement, MSTreeView);

到此,基本結束,此時就可以在頁面正確顯示自行定義的 XML 文檔的樹目錄,但我還不認為方便,於是將其綜合後寫成了一個組件,於是在使用的時候只需拖放到頁面上……但後來在找資料的時候找到了其實 Treeview  控制項本身就可以直接使用 XML 文檔(http://www.yesky.com/SoftChannel/72342380468043776/20040630/1825811.shtml)。所以,這個方法就只能是一段用以學習的代碼了!

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.