TreeView Web 服务器控件用于以树形结构显示分层数据,如目录或文件目录。它支持以下功能:

自动数据绑定,该功能允许将控件的节点绑定到分层数据(如 XML 文档)。

通过与 SiteMapDataSource 控件集成提供对站点导航的支持。

可以显示为可选择文本或超链接的节点文本。

可通过主题、用户定义的图像和样式自定义外观。

通过编程访问 TreeView 对象模型,使您可以动态地创建树,填充节点以及设置属性等。

通过客户端到服务器的回调填充节点(在受支持的浏览器中)。

能够在每个节点旁边显示复选框。

 

TreeView 控件由一个或多个节点构成。树中的每个项都被称为一个节点,由 TreeNode 对象表示。下表描述了三种不同的节点类型。

节点类型  说明 
根节点
 没有父节点、但具有一个或多个子节点的节点。
 
父节点
 具有一个父节点,并且有一个或多个子节点的节点。
 
叶节点
 没有子节点的节点。
 


每个节点都具有一个 Text 属性和一个 Value 属性。Text 属性的值显示在 TreeView 控件中,而 Value 属性则用于存储有关该节点的任何附加数据(例如传递给与节点相关联的回发事件的数据)。

单击 TreeView 控件的节点时,将引发选择事件(通过回发)或导航至其他页。未设置 NavigateUrl 属性时,单击节点将引发 SelectedNodeChanged 事件,您可以处理该事件,从而提供自定义的功能。每个节点还都具有 SelectAction 属性,该属性可用于确定单击节点时发生的特定操作,例如展开节点或折叠节点。若要在单击节点时不引发选择事件而导航至其他页,可将节点的 NavigateUrl 属性设置为除空字符串 ("") 之外的值。

 

TreeView控件可以手动定义节点,也可以动态定义,MSDN有一个详例


下面是读取Northwind中的产品分类和产品内容列表为例建立TreeView的实例

首页建一个新页,拖入一个TreeView控件..定一个自己喜欢的风格
再建拖入一个label控件,ID为labelStatus,用来反映错误信息

在“工具箱”中,从“导航”组中将“TreeView”控件拖动到页面上。

右击“TreeView”控件,单击“属性”,然后将“MaxDataBindDepth”设置为“2”。

右击“TreeView”控件,单击“显示智能任务”,然后在“TreeView 任务”菜单上单击“编辑节点”。

在“TreeView 节点编辑器”对话框中,单击带有“添加根节点”标签的图标,然后在“属性”下将“Text”设置为“产品列表”,并将“PopulateOnDemand”设置为 true。

单击“确定”。现在创建的是最顶部的树节点,该节点只包含静态文本

PopulateOnDemand 是根目录载入时触发的事件


下面是PopulateOnDemand事件的内容(Treeview2为ID)

 1using System;
 2using System.Data;
 3using System.Configuration;
 4using System.Web;
 5using System.Web.Security;
 6using System.Web.UI;
 7using System.Web.UI.WebControls;
 8using System.Web.UI.WebControls.WebParts;
 9using System.Web.UI.HtmlControls;
10using System.Data.SqlClient;
11
12
13public partial class _Default : System.Web.UI.Page 
14{
15    protected void Page_Load(object sender, EventArgs e)
16    {
17
18    }

19    protected void TreeView2_TreeNodePopulate(object sender, TreeNodeEventArgs e)
20    {
21        if (e.Node.ChildNodes.Count == 0)//如果节点没有载入过
22        {
23            switch (e.Node.Depth)//获取节点的深度
24            {
25                case 0:
26                    PopulateCategories(e.Node);//一级深度载入分类名
27                    break;
28                case 1:
29                    PopulateProducts(e.Node);//二级深度载入分类下的产品列表
30                    break;
31            }

32        }

33
34    }

35
36    protected void PopulateProducts(TreeNode node)
37    {
38        SqlCommand sqlQuery = new SqlCommand();
39        sqlQuery.CommandText = "Select ProductName From Products where CategoryID=@categoryid";
40        sqlQuery.Parameters.Add("@categoryid", SqlDbType.Int).Value = node.Value;
41        DataSet ResultSet = RunQuery(sqlQuery);//传递一个Commend对象
42        if (ResultSet.Tables.Count > 0)
43        {
44            foreach (DataRow row in ResultSet.Tables[0].Rows)//循环表行
45            {
46                TreeNode newnode = new TreeNode(row["ProductName"].ToString());
47
48                newnode.PopulateOnDemand = false;
49                newnode.SelectAction = TreeNodeSelectAction.None;
50                node.ChildNodes.Add(newnode);//将内容加入TreeView
51
52            }

53        }

54
55    }

56    protected void PopulateCategories(TreeNode node)
57    {
58        SqlCommand sqlQuery = new SqlCommand("select CategoryName,CategoryID from Categories");
59        DataSet resultSet = RunQuery(sqlQuery);//取出分类表
60
61        if (resultSet.Tables.Count > 0)
62        {
63            foreach (DataRow row in resultSet.Tables[0].Rows)
64            {
65                TreeNode newnode = new TreeNode(row["CategoryName"].ToString(), row["CategoryID"].ToString());//建立新节点
66                newnode.PopulateOnDemand = true;
67                newnode.SelectAction = TreeNodeSelectAction.Expand;
68                node.ChildNodes.Add(newnode);//加入TreeView
69
70            }

71        }

72    }

73    private DataSet RunQuery(SqlCommand sqlQuery)
74    {
75        string connectionString = ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString;
76        SqlConnection DBconnection = new SqlConnection(connectionString);//创建一个conn
77        SqlDataAdapter dbAdapter = new SqlDataAdapter();//创建一个适配器
78        dbAdapter.SelectCommand = sqlQuery;//传入Commend
79        sqlQuery.Connection = DBconnection;
80        DataSet resultsDataset = new DataSet();
81        try
82        {
83            dbAdapter.Fill(resultsDataset);
84        }

85        catch
86        {
87            labelStatus.Text = "连接数据库出错";
88        }

89        return resultsDataset;
90
91    }

92}

93



运行效果图:

 

OK,更多内容,可以参看MSDN,我也是看着练的

posted on 2007-04-09 13:10  新世代三无人  阅读(1948)  评论(0编辑  收藏  举报