ASP.Net 2.0 TreeView控件 介绍 详解

来源:互联网 发布:在线网络优化培训 编辑:程序博客网 时间:2024/06/05 06:12

 

TreeView控件
在我们的开发中经常会遇到一些有树形层次关系的数据,比如显示无限级分类和显示某个文件下的所有文件及文件夹,对于这些带有树形层次关系的数据的显示用TreeView控件是一个比较不错的选择。TreeView控件支持数据绑定也支持以编程的方式动态添加节点。在TreeView控件中每个节点都是一个TreeNode对象,我们可以通过TreeNode对象的Nodes属性来添加其它的TreeNode对象,使之成为这个TreeNode对象的子节点。
TreeView对象有以下常见属性:


属性名说明
CheckedNodes获取选中了复选框的节点
CollapseImageUrl节点折叠时的图象
DataSource绑定到TreeView控件的数据源
DataSourceID绑定到TreeView控件的数据源控件的ID
EnableClientScript是否允许客户端处理展开和折叠事件
ExpandDepth第一次显示时所展开的级数
ExpandImageUrl节点展开的时的图象
NoExpandImageUrl不可折叠(即无字节点)的节点的图象
PathSeparator节点之间的值的路径分隔符
SelectedNode当前选中的节点
SelectedValue当前选中的值
ShowCheckBoxes是否在节点前显示复选框
下面是一个简单的例子。我们的数据都是从一个XML文件中读取的,并将它的节点通过代码的方式添加到TreeView控件中。这个XML文件的物理文件名为area.xml,与下面的asp.net在同一个文件夹下,它的内容如下:


  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <Area>
  3.   <Province iAreaID ="1" cAreaName="北京市"/>
  4.   <Province iAreaID ="2" cAreaName="上海市"/>
  5.   <Province iAreaID ="3" cAreaName="天津市"/>
  6.   <Province iAreaID ="4" cAreaName="重庆市"/>
  7.   <Province iAreaID ="5" cAreaName="湖北省">
  8.     <City iAreaID ="51" cAreaName="武汉市"/>
  9.     <City iAreaID ="52" cAreaName="黄冈市" />
  10.     <City iAreaID ="53" cAreaName="荆州市"/>
  11.     <City iAreaID ="54" cAreaName="武穴市" />
  12.     <City iAreaID ="55" cAreaName="十堰市"/>
  13.     <City iAreaID ="56" cAreaName="黄石市" />
  14.   </Province>
  15.   <Province iAreaID ="6" cAreaName="河北省">
  16.     <City iAreaID ="61" cAreaName="石家庄市"/>
  17.     <City iAreaID ="62" cAreaName="唐山市" />
  18.   </Province>
  19.   <Province iAreaID ="7" cAreaName="山西省">
  20.     <City iAreaID ="71" cAreaName="太原市" />
  21.     <City iAreaID ="72" cAreaName="大同市" />
  22.   </Province>
  23. </Area>

前台代码:


 

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="TreeDemo.aspx.cs" Inherits="TreeDemo" %>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" >
  4. <head runat="server">
  5.     <title>TreeView控件的例子</title>
  6. </head>
  7. <body>
  8.     <form id="form1" runat="server">
  9.     <div>
  10.         <asp:TreeView ID="treeAreaList" runat="server" AutoGenerateDataBindings="False" OnSelectedNodeChanged="Tree_SelectedNodeChanged">
  11.         </asp:TreeView>
  12.         </div>
  13.     </form>
  14. </body>
  15. </html>

后台代码如下:

  1. using System;
  2. using System.Data;
  3. using System.Configuration;
  4. using System.Collections;
  5. using System.Web;
  6. using System.Web.Security;
  7. using System.Web.UI;
  8. using System.Web.UI.WebControls;
  9. using System.Web.UI.WebControls.WebParts;
  10. using System.Web.UI.HtmlControls;
  11. using System.Xml;
  12. using System.Xml.XPath;
  13. public partial class TreeDemo : System.Web.UI.Page
  14. {
  15.     XmlDocument xmlDoc;
  16.     protected void Page_Load(object sender, EventArgs e)
  17.     {
  18.         if (!Page.IsPostBack)
  19.         {
  20.             MakeParentNode();
  21.         }
  22.     }
  23.     #region  //生成父结点
  24.     /// <summary>
  25.     /// 生成
  26.     /// </summary>
  27.     protected void MakeParentNode()
  28.     {
  29.         treeAreaList.Nodes.Clear();
  30.         xmlDoc = new XmlDocument();
  31.         xmlDoc.Load(Server.MapPath("area.xml "));//动态加载XML文档 
  32.         XmlNodeList nodeList = xmlDoc.SelectSingleNode("Area").ChildNodes;//获取Area节点下的所有子结点 
  33.         //定义Area结点 
  34.         TreeNode topNode = new TreeNode();//定义顶级节点
  35.         topNode.Text = "area ";
  36.         //  tn.Value = "-1"; 
  37.         topNode.Expanded = true;
  38.         treeAreaList.Nodes.Add(topNode);//添加"区域"父结点 
  39.         XmlElement element = null;
  40.         TreeNode treeNode = null;
  41.         //遍历区域下的所有省和直辖市 
  42.         foreach (XmlNode node in nodeList)
  43.         {
  44.             element = (XmlElement)node;
  45.             treeNode = new TreeNode();
  46.             treeNode.Text = element.GetAttribute("cAreaName");//在树控件上显示省或直辖市的名称 
  47.             treeNode.Value = element.GetAttribute("iAreaID");//获取节点值
  48.             treeNode.Expanded = true;
  49.             topNode.ChildNodes.Add(treeNode);//将省或直辖市级结点添加到顶级节点中 
  50.             MakeChildNode(node.ChildNodes, treeNode);//通过递归将所有子节点添加到节点集合中
  51.         }
  52.     }
  53.     #endregion
  54.     #region  //生成子结点
  55.     /// <summary>
  56.     /// 递归将子节点添加到当前节点下
  57.     /// </summary>
  58.     /// <param name="nodeList">XmlNodeList的实例</param>
  59.     /// <param name="treeNode">要添加子节点的父节点</param>
  60.     protected void MakeChildNode(XmlNodeList nodeList, TreeNode treeNode)
  61.     {
  62.         XmlElement element = null;
  63.         TreeNode subTreeNode = null;
  64.         //遍历省级节点下的所有市,市辖区 
  65.         foreach (XmlNode node in nodeList)
  66.         {
  67.             element = (XmlElement)node;
  68.             subTreeNode = new TreeNode();
  69.             subTreeNode.Text = element.GetAttribute("cAreaName");//在树控件上显示市或市辖区的名称 
  70.             subTreeNode.Value = element.GetAttribute("iAreaID");//这里设置节点Value
  71.             subTreeNode.Expanded = true;
  72.             treeNode.ChildNodes.Add(subTreeNode);//将子结点添加到父结点下面 
  73.             MakeChildNode(node.ChildNodes, subTreeNode);//递归调用本方法
  74.         }
  75.     }
  76.     #endregion
  77.     protected void Tree_SelectedNodeChanged(object sender, EventArgs e)
  78.     {
  79.         Response.Write("节点的值:" + treeAreaList.SelectedNode.Value+"<br/>");
  80.         Response.Write("节点的路径:" + treeAreaList.SelectedNode.ValuePath + "<br/>");
  81.         Response.Write("节点的数据路径:" + treeAreaList.SelectedNode.DataPath + "<br/>");
  82.     }
  83. }


有关XML文件的读取是一个比较复杂的问题,这里在代码中仅对程序中所使用的代码进行了详尽的注释。这个页面的运行效果如下:
 
因为我们给TreeView控件的SelectedNodeChanged事件添加了处理方法,所以当我们点击节点时会进行相关的处理,下面是点击黄冈市的效果:

 

 

文章来源:http://blog.csdn.net/zhoufoxcn/archive/2008/11/03/3208413.aspx

 

 

原创粉丝点击