利用Treeview做权限树的一种方法
2006-04-24 16:14
316 查看
在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 + "<br/>");
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();
}
}
http://jeffamy.cnblogs.com/archive/2006/03/24/357742.html
假设父权限树已经生成(具体数据表结构请参照上一篇《递归实现无限级树》);假设已经在父树上启用了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 + "<br/>");
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();
}
}
http://jeffamy.cnblogs.com/archive/2006/03/24/357742.html
相关文章推荐
- 利用Treeview做权限树的一种方法
- 利用Treeview做权限树的一种方法
- 一种利用重链剖分优化一类树形动态规划空间复杂度的方法
- 一种基于delphi巧妙权限控制方案及其实现方法
- 利用canvas实现鼠标拖拽效果的一种方法
- Delphi 一种简单的二进制校验方法,适用于简单的权限管理或开关控制
- B/S系统权限控制的一种简单方法
- AD域环境下利用Supercrypt实现普通用户安装/运行/更新使用管理权限的方法
- 一种基于注解的Spring MVC权限控制方法
- 利用SQL存储过程生成程序编号的一种方法
- 实现数据权限控制的一种方法
- 【AD】AD域环境下利用Supercrypt实现普通用户安装/运行/更新使用管理权限的方法
- URL 授权访问另外一种方法,利用 Java 1.1 访问密码保护的 URL(9588http短信通道接入)
- URL 授权访问另外一种方法,利用 Java 1.1 访问密码保护的 URL(9588http短信通道接入)
- 利用多叉树实现Ext JS中的无限级树形菜单(一种构建多级有序树形结构JSON的方法)
- 实现数据权限控制的一种方法
- 【分析】一种小堆(heap)溢出的另类利用方法
- 利用phpmyadmin设置mysql的权限方法
- OSError: [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试 解决方法