TreeView-无限级树及用户权限的设置

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值