您的位置:首页 > 其它

利用Treeview做权限树的一种方法

2006-03-29 17:00 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: