我看过比较多的treeview与权限的解决方法,感觉总是太复杂,而且不实用(也许自己太笨,仅仅是个人看法)。下面我用treeview与数据库结合来实现下面图所示的权限(角色)的管理。
有一个图可以参考:
首先,应该有2个表:
表1: Accounts_PermissionCategories(权限类别表)
ID Name desc
01 案件处理
02 统计报表
03 商标查询
表2: Accounts_Permission(权限表)
ID CategoryID Name desc
01 01 立案资料录入
02 01 立案资料查询
private void Page_Load(object sender, System.EventArgs e)
{
if(!Page.IsPostBack)
{
BindPermissionCategories();
BindPermission();
}
}
private void BindPermissionCategories()
{//绑定权限类别信息
string info = string.Empty;
RG.JGJ.Modules.Accounts.Business.PermissionCategory pc = new RG.JGJ.Modules.Accounts.Business.PermissionCategory();
SortedList sl = pc.GetPermissionCategoriesForTreeView(out info);
int count = sl.Count;
Microsoft.Web.UI.WebControls.TreeNode[] rootNodes = new Microsoft.Web.UI.WebControls.TreeNode[count];
for(int i=0;i<count;i++)
{
rootNodes[i] = new Microsoft.Web.UI.WebControls.TreeNode();
rootNodes[i].Expanded = true;
rootNodes[i].Text = sl.GetByIndex(i).ToString();
rootNodes[i].NodeData = sl.GetKey(i).ToString();
TreeView1.Nodes.Add(rootNodes[i]);
}
}
#region
private void BindPermission()
{//绑定权限信息
string info = string.Empty;
Microsoft.Web.UI.WebControls.TreeNodeCollection nodes = TreeView1.Nodes;
if(nodes.Count > 0)
{
RG.JGJ.Modules.Accounts.Business.Permission p = new RG.JGJ.Modules.Accounts.Business.Permission();
for(int i=0;i<nodes.Count;i++)
{
SortedList sl = p.GetPermissionForTreeView(nodes[i].NodeData,out info);
int count = sl.Count;
Microsoft.Web.UI.WebControls.TreeNode[] ns = new Microsoft.Web.UI.WebControls.TreeNode[count];
for(int j=0;j<count;j++)
{
ns[j] = new Microsoft.Web.UI.WebControls.TreeNode();
ns[j].Expanded = true;
ns[j].Text = sl.GetByIndex(j).ToString();
ns[j].NodeData = sl.GetKey(j).ToString();
ns[j].CheckBox = true;
nodes[i].Nodes.Add(ns[j]);
}
}
}
}
#endregion
private void Button1_Click(object sender, System.EventArgs e)
{
foreach(Microsoft.Web.UI.WebControls.TreeNode node in TreeView1.Nodes)
{
//Response.Write(node.Text + ":" + node.NodeData + "<br>");
foreach(Microsoft.Web.UI.WebControls.TreeNode n in node.Nodes)
{
if(n.Checked == true)
{//下面的数据就是我们想要的结果,实现了角色的生成
//((...)n.Parent).NodeData是权限类别的ID
//n.NodeData是权限的ID
Response.Write(((Microsoft.Web.UI.WebControls.TreeNode)(n.Parent)).NodeData + ":" + n.NodeData + "<br>");
}
}
}
}
}
}
上面的代码我都编译通过,而且达到预期目的。