首页  ·  知识 ·  云计算
利用Treeview做权限树的一种方法
佚名  本站原创  综合  编辑:dezai  图片来源:网络
在B/S结构中,用Treeview做权限这一部分是很直观的一个办法。假设有一棵权限树来给某用户分配权限,勾选中的一些节点保存下来,当用户登陆时再根据数据库生

在B/S结构中,用Treeview做权限这一部分是很直观的一个办法。假设有一棵权限树来给某用户分配权限,勾选中的一些节点保存下来,当用户登陆时再根据数据库生成一棵子权限树。下面写的便是生成子树的一种方法。
假设父权限树已经生成(具体数据表结构请参照上一篇《递归实现无限级树》);假设已经在父树上启用了checkbox,并且以“节点ID.节点ID.节点ID.节点ID.”这种方式保存具有权限的节点。
再假设用户表是这样的:

create table tab_user
(
    ID int Identity(1,1) primary key,
    [user_name] varchar(20) not null,
    [user_pwd] varchar(20) not null,
    [user_grant] varchar(50)
        --保存权限的字段。视权限项目的多少修改长度
)
go

insert into tab_user ([user_name],[user_pwd],[user_grant]) values('jeff','123','1.4.10.7.8.')
    --假设已经分配了权限,保存的是树的节点的value
go
页面上放一Treeview1,代码如下
using System;
using System.Data;
using System.Configuration;
using System.Collections;
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;

public partial class treeview2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        SqlConnection myConn = new SqlConnection("user id=sa;password=123;Database =test;data source=jeff;");
        try
        {
            //初始化连接字符串
           
            SqlDataAdapter myAdapter = new SqlDataAdapter("select * from menu order by parentID ", myConn); ;
            DataSet ds = new DataSet();
            myAdapter.Fill(ds);
            this.ViewState["ds"] = ds;
        }
        catch (Exception ex)
        {
            Session["Error"] = ex.ToString();
           
        }
        finally
        {
            myConn.Close();
        }
        //调用递归函数,完成树形结构的生成
        if (!IsPostBack)
        {
            AddTree(0, (TreeNode)null);
        }

    }


    //递归添加树的节点
    public void AddTree(int ParentID, TreeNode pNode)
    {
        DataSet ds = (DataSet)this.ViewState["ds"];
        DataView dvTree = new DataView(ds.Tables[0]);
       
        //过滤ParentID,得到当前的所有子节点
        dvTree.RowFilter = "[PARENTID] = " + ParentID;
        
        foreach (DataRowView Row in dvTree)
        {
            TreeNode Node = new TreeNode();
            if (pNode == null)
            {    //添加根节点
                Node.Text = Row["Title"].ToString();
                Node.Value = Row["ID"].ToString();
                Node.NavigateUrl = Row["url"].ToString();
                Node.ToolTip = Row["description"].ToString();
                TreeView1.Nodes.Add(Node);
                Node.Expanded = true;
                AddTree(Int32.Parse(Row["ID"].ToString()), Node);        //再次递归
            }
            else
            {   //?添加当前节点的子节点
                Node.Text = Row["Title"].ToString();
                Node.Value = Row["ID"].ToString();
                Node.NavigateUrl = Row["url"].ToString();
                Node.ToolTip = Row["description"].ToString();
               
                pNode.ChildNodes.Add(Node);
                Node.Expanded = true;
                AddTree(Int32.Parse(Row["ID"].ToString()), Node);     //再次递归
            }

        }
    }

    protected void btnGrant_Click(object sender, EventArgs e)//保存权限
    {
        string strGrant="";
        string strComm = "";
        foreach (TreeNode cnode in TreeView1.CheckedNodes)
        {
            //Response.Write(cnode.Text + "的父节点是" + cnode.Parent.Text + "
");
            strGrant = strGrant + cnode.Value + ".";
        }
        //Response.Write(strGrant);
        strComm = "update tab_user set user_Grant='"+ strGrant +"' where user_name='jeff'";
        SqlConnection myConn = new SqlConnection("user id=sa;password=123;Database =test;data source=jeff;");
        myConn.Open();
        SqlCommand myComm = new SqlCommand(strComm,myConn );
        myComm.ExecuteNonQuery();
        myConn.Close();
    }

  
}

 

本文作者:佚名 来源:本站原创
CIO之家 www.ciozj.com 微信公众号:imciow
   
免责声明:本站转载此文章旨在分享信息,不代表对其内容的完全认同。文章来源已尽可能注明,若涉及版权问题,请及时与我们联系,我们将积极配合处理。同时,我们无法对文章内容的真实性、准确性及完整性进行完全保证,对于因文章内容而产生的任何后果,本账号不承担法律责任。转载仅出于传播目的,读者应自行对内容进行核实与判断。请谨慎参考文章信息,一切责任由读者自行承担。
延伸阅读