a.aspx
<head runat="server">
<title>无标题页</title>
<script type="text/javascript">
function client_OnTreeNodeChecked() {
var obj = window.event.srcElement;
var treeNodeFound = false;
var checkedState;
if (obj.tagName == "INPUT" && obj.type == "checkbox") {
var treeNode = obj;
checkedState = treeNode.checked;
do { obj = obj.parentElement; } while (obj.tagName != "TABLE")
var parentTreeLevel = obj.rows[0].cells.length;
var parentTreeNode = obj.rows[0].cells[0];
var tables = obj.parentElement.getElementsByTagName("TABLE");
var numTables = tables.length
if (numTables >= 1) {
for (i=0; i < numTables; i++) {
if (tables[i] == obj) {
treeNodeFound = true;
i++;
if (i == numTables) { return; }
}
if (treeNodeFound == true) {
var childTreeLevel = tables[i].rows[0].cells.length;
if (childTreeLevel > parentTreeLevel) {
var cell = tables[i].rows[0].cells[childTreeLevel - 1];
var inputs = cell.getElementsByTagName("INPUT");
inputs[0].checked = checkedState;
}
else { return; }
}
}
}
}
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div><table width="80%">
<tr><td width="50%">
<asp:TreeView runat="server" ID="t_main" BorderStyle="Ridge" Height="375px" ShowCheckBoxes="All" ShowLines="True" Width="360px" οnclick="client_OnTreeNodeChecked();">
</asp:TreeView>
</td>
<td rowspan="2" width="50%" align="center"><table width="90%">
<tr>
<td width="30%" align="right">所属父级:</td>
<td align="left">
<asp:DropDownList ID="ddl_tree" runat="server">
</asp:DropDownList></td>
</tr>
<tr>
<td width="30%" align="right">节点名称:</td>
<td align="left">
<asp:TextBox ID="tb_treename" runat="server"></asp:TextBox> <span style="color:Red">*<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="tb_treename"
ErrorMessage="必填"></asp:RequiredFieldValidator></span></td>
</tr>
<tr>
<td width="30%" align="right">链接地址:</td>
<td align="left">
<asp:TextBox ID="tb_url" runat="server"></asp:TextBox></td>
</tr>
<tr>
<td colspan="2" align="center">
<asp:Button ID="bt_add" runat="server" Text="添 加" OnClick="bt_add_Click" /></td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="50%" align="center">
<asp:Button ID="bt_submit" runat="server" Text="保 存" OnClick="bt_submit_Click" />
</td>
</tr>
</table>
</div>
</form>
</body>
a.aspx.cs
public int flag;
public string space;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack) {
flag = 0;
space = "";
BindToTree(0);
BindToDDLTree(0);
}
}
//绑定下拉列表
protected void BindToDDLTree(int parentid)
{
ListItem li;
string Sql = "Select * From T_Tree Where Parentid=" + parentid.ToString();
DataSet ds = DBClass.getDataSet(Sql, "tree");
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
space = "";
li = new ListItem();
DataRow dr = ds.Tables[0].Rows[i];
li.Text = "|-" + dr["treename"].ToString();
li.Value = dr["id"].ToString();
//tn.NavigateUrl = dr["url"].ToString();
ddl_tree.Items.Add(li);
flag++;
AddDDLChild((int)dr["id"], flag);
}
li= new ListItem();
li.Text = "父结点";
li.Value = "0";
ddl_tree.Items.Insert(0, li);
}
protected void AddDDLChild(int parentid, int index) {
ListItem li;
string Sql = "Select * From T_Tree Where Parentid=" + parentid.ToString();
DataSet ds = DBClass.getDataSet(Sql, "tree");
space += ds.Tables[0].Rows.Count > 0 ? " " : "";
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
li = new ListItem();
DataRow dr = ds.Tables[0].Rows[i];
li.Text = space + "|-" + dr["treename"].ToString();
li.Value = dr["id"].ToString();
//tn.NavigateUrl = dr["url"].ToString();
ddl_tree.Items.Add(li);
flag++;
AddDDLChild((int)dr["id"], flag);
}
space = space.Length > 1 && ds.Tables[0].Rows.Count > 0 ? space.Substring(0, space.Length - 1) : space;
}
//绑定树控件
protected void BindToTree(int parentid)
{
//TreeNode tn;
//string Sql = "Select * From T_Tree Where Parentid=" + parentid.ToString();
//DataSet ds = DBClass.getDataSet(Sql, "tree");
//for (int i = 0; i < ds.Tables[0].Rows.Count; i++) {
// tn = new TreeNode();
// DataRow dr = ds.Tables[0].Rows[i];
// tn.Text = dr["treename"].ToString();
// tn.Value = dr["treecode"].ToString();
// //tn.NavigateUrl = dr["url"].ToString();
// t_main.Nodes.Add(tn);
// AddTreeChild((int)dr["id"], tn);
//}
TreeNode tn = new TreeNode();
tn.Text = "全部";
tn.Value = parentid.ToString();
t_main.Nodes.Add(tn);
AddTreeChild(parentid, tn);
}
//递归增加子项
protected void AddTreeChild(int parentid, TreeNode tn) {
TreeNode ctn;
string Sql = "Select * From T_Tree Where Parentid=" + parentid.ToString();
DataSet ds = DBClass.getDataSet(Sql, "tree");
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
ctn = new TreeNode();
DataRow dr = ds.Tables[0].Rows[i];
ctn.Text = dr["treename"].ToString();
ctn.Value = dr["id"].ToString();
//ctn.NavigateUrl = dr["url"].ToString();
tn.ChildNodes.Add(ctn);
AddTreeChild((int)dr["id"], ctn);
}
}
protected void bt_add_Click(object sender, EventArgs e)
{
string Sql = @"Insert Into T_Tree(treename,parentid,url) Values('"+tb_treename.Text.Replace("'","''")
+ "','" + Request.Form[ddl_tree.UniqueID] + "','" + tb_url.Text.Replace("'", "''") + "') ";
if (DBClass.ExecSQL(Sql))
{
Response.Write("<script>alert('数据添加成功!');location.href='default.aspx';</script>");
}
else {
Response.Write("<script>alert('数据添加失败!');history.go(-1);</script>");
}
}
protected void bt_submit_Click(object sender, EventArgs e)
{
string levelstr = "";
foreach (TreeNode tn in t_main.Nodes) {
if (tn.Checked) {
levelstr += tn.Value.ToString() + ",";
levelstr += SearchCheck(tn);
}
}
string sql = "update t_admin set levelstr='" + levelstr + "' where manager='" + Session["admin"] + "'";
if (DBClass.ExecSQL(sql))
{
Response.Write("<script>alert('权限设置成功!');location.href='default.aspx';</script>");
}
else
{
Response.Write("<script>alert('权限设置失败!');history.go(-1);</script>");
}
}
protected string SearchCheck(TreeNode tn) {
string str = "";
foreach (TreeNode ctn in tn.ChildNodes) {
if (ctn.Checked) {
str += ctn.Value.ToString() + ",";
str += SearchCheck(ctn);
}
}
return str;
}
dbclass.cs
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
/// <summary>
/// DBClass 的摘要说明
/// </summary>
public class DBClass
{
public DBClass()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
protected static SqlConnection getConn()
{
string connstr = ConfigurationManager.ConnectionStrings["dbpath"].ConnectionString.ToString();
SqlConnection conn = new SqlConnection(connstr);
return conn;
}
/// <summary>
/// 返回DataSet结果集
/// </summary>
/// <param name="sql">要执行的SQL语句</param>
/// <param name="tbname">DataSet中表名</param>
/// <returns>DataSet</returns>
public static DataSet getDataSet(string sql, string tbname)
{
using (SqlConnection conn = getConn())
{
conn.Open();
using (DataSet ds = new DataSet())
{
using (SqlDataAdapter da = new SqlDataAdapter(sql, conn))
{
da.Fill(ds, tbname);
return ds;
}
}
}
}
/// <summary>
/// 返回SQL语句执行的状态
/// </summary>
/// <param name="sql">要执行的SQL语句</param>
/// <returns>Boolean</returns>
public static Boolean ExecSQL(string sql)
{
using (SqlConnection conn = getConn())
{
conn.Open();
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
int re = cmd.ExecuteNonQuery();
return re > 0 ? true : false;
}
}
}
/// <summary>
/// 执行查询,返回查询结果第一行第一列的值
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public static int ExecScalar(string sql)
{
using (SqlConnection conn = getConn())
{
conn.Open();
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
return (int)cmd.ExecuteScalar();
}
}
}
///<summary>
/// 说明:返回Reader
///</summary>
public static SqlDataReader GetDataReader(string Sql) {
using (SqlConnection conn = getConn())
{
conn.Open();
using (SqlCommand cmd = new SqlCommand(Sql, conn))
{
using (SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
return dr;
}
}
}
}
sql
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[T_Admin]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[T_Admin]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[T_Tree]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[T_Tree]
GO
CREATE TABLE [dbo].[T_Admin] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[manager] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[pwd] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[levelstr] [varchar] (5000) COLLATE Chinese_PRC_CI_AS NULL ,
[state] [bit] NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[T_Tree] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[treename] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[parentid] [int] NULL ,
[treecode] [varchar] (500) COLLATE Chinese_PRC_CI_AS NULL ,
[url] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[T_Admin] ADD
CONSTRAINT [DF_T_Admin_manager] DEFAULT ('') FOR [manager],
CONSTRAINT [DF_T_Admin_pwd] DEFAULT ('') FOR [pwd],
CONSTRAINT [DF_T_Admin_levelstr] DEFAULT ('') FOR [levelstr],
CONSTRAINT [DF_T_Admin_state] DEFAULT (0) FOR [state]
GO
ALTER TABLE [dbo].[T_Tree] ADD
CONSTRAINT [DF_T_Tree_treename] DEFAULT ('') FOR [treename],
CONSTRAINT [DF_T_Tree_parentid] DEFAULT (0) FOR [parentid],
CONSTRAINT [DF_T_Tree_treecode] DEFAULT ('') FOR [treecode],
CONSTRAINT [DF_T_Tree_url] DEFAULT ('') FOR [url]
GO