最近也没有多少事做,自己在业余的时间研究了一下Treeview的使用方法,试着做一个功能树的东东。
刚开始做的时候可遇到了不少麻烦,并不是自己想象的那么简单,Treeview一点也不听使唤。
1.根节点在包含子结点的时候根本不需要跳转页面,点击跟结点名称的时候需要它执行的是展开和折叠子结点。
通过大量的网上查找资料和VS的帮助总算找到了实现方法:
//通过设置结点的SelectAction属性
node.SelectAction = TreeNodeSelectAction.Expand;//用来折叠和展开结点
2.为了不让点击结点默认回发页面,可以使用以下方法实现:
方法1:
node.NavigateUrl = "javascript:void(0)";
//或者
node.NavigateUrl = "javascript:;"; //用一个 ; (分号)表示 javascript 的空语句
方法2:
node.NavigateUrl = "#";
3.实现Treeview的复选框级联操作
看了这篇文章http://www.cnblogs.com/itrust/archive/2006/04/03/365439.aspx 后很容易就可以实现级联
在这里感谢 博客251 提供的方法
在上面的地址里可以下载到 用到的TreeView2.js文件
下面是我通过一个例子的实现方法, 创建一个TreeView.asp页面
前台代码:

Code
1
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TreeView.aspx.cs" Inherits="TreeView" %>
2
3
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4
5
<html xmlns="http://www.w3.org/1999/xhtml" >
6
<head runat="server">
7
<title>无标题页</title>
8
<script type ="text/javascript" src ="JS/TreeView2.js"></script>
9
</head>
10
<script type="text/javascript">
11
// 感谢博客251 http://www.cnblogs.com/itrust/archive/2006/04/03/365439.aspx
12
// 级联选择
13
function OnTreeNodeChecked(evt)
14

{
15
var element = window.event.srcElement;
16
if (!IsCheckBox(element))
17
return;
18
19
var isChecked = element.checked;
20
var tree = TV2_GetTreeById("TreeView1");
21
var node = TV2_GetNode(tree,element);
22
23
TV2_SetChildNodesCheckStatus(node,isChecked);
24
25
var parent = TV2_GetParentNode(tree,node);
26
TV2_NodeOnChildNodeCheckedChanged(tree,parent,isChecked);
27
}
28
</script>
29
<body>
30
<form id="form1" runat="server">
31
<div>
32
<asp:TreeView ID="TreeView1" runat="server" ShowCheckBoxes="All" ShowLines="True">
33
</asp:TreeView>
34
</div>
35
</form>
36
</body>
37
</html>
后台代码:

Code
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.Data.SqlClient;
12
13
public partial class TreeView : System.Web.UI.Page
14

{
15
public SqlConnection cn;
16
public SqlCommand mycmd;
17
public SqlDataAdapter da;
18
protected void Page_Load(object sender, EventArgs e)
19
{
20
21
if (!IsPostBack)
22
{
23
//绑定事件
24
TreeView1.Attributes.Add("onclick", "OnTreeNodeChecked(event)");
25
TreeViewBind();
26
}
27
}
28
29
主从表绑定#region 主从表绑定
30
private void TreeViewBind()
31
{
32
string constring = System.Configuration.ConfigurationSettings.AppSettings["strConn"];
33
cn = new SqlConnection(constring);
34
mycmd = new SqlCommand("select * from country", cn);
35
da = new SqlDataAdapter(mycmd);
36
DataSet ds1 = new DataSet();
37
da.Fill(ds1, "country");//读出一类
38
//读出国家名称
39
for (int i = 0; i < ds1.Tables["country"].Rows.Count; i++)
40
{
41
TreeNode td1 = new TreeNode();
42
td1.Text = ds1.Tables["country"].Rows[i]["country"].ToString();//大类国家列表
43
td1.Value = ds1.Tables["country"].Rows[i]["id"].ToString();
44
td1.NavigateUrl = "~/WebFiles/List.aspx?id" + td1.Value + "&" + "country=" + td1.Text;//连接地址
45
TreeView1.Nodes.Add(td1);
46
47
48
//读出省名
49
string sql = "select * from province where id= '" + ds1.Tables["country"].Rows[i]["id"].ToString() + "'";
50
mycmd = new SqlCommand(sql, cn);
51
da = new SqlDataAdapter(mycmd);
52
DataSet ds2 = new DataSet();
53
da.Fill(ds2, "province");//读出二类
54
55
for (int j = 0; j < ds2.Tables["province"].Rows.Count; j++)
56
{
57
TreeNode td2 = new TreeNode();
58
td2.Text = ds2.Tables["province"].Rows[j]["province"].ToString();//二类省名
59
//td2.NavigateUrl = "~/WebFiles/List.aspx?D_ID={0}&D_Name={1}";//连接地址
60
td1.ChildNodes.Add(td2);
61
62
//读出城市名称
63
string sql3 = "select * from city where pid= '" + ds2.Tables["province"].Rows[j]["pid"].ToString() + "'";
64
mycmd = new SqlCommand(sql3, cn);
65
da = new SqlDataAdapter(mycmd);
66
DataSet ds3 = new DataSet();
67
da.Fill(ds3, "city");//读出三类
68
69
for (int k = 0; k < ds3.Tables["city"].Rows.Count; k++)
70
{
71
TreeNode td3 = new TreeNode();
72
td3.Text = ds3.Tables["city"].Rows[k]["city"].ToString();//三类城市名
73
td2.ChildNodes.Add(td3);
74
}
75
}
76
}
77
TreeView1.DataBind();
78
}
79
#endregion
80
}
数据库的设计
SQL Services 2000 直接还原下面的文件
备份文件下载地址https://files.cnblogs.com/ZHF/treeExp.rar