Treeview与权限(我的一个小解决方法)

来源:互联网 发布:pdfobject.js 编辑:程序博客网 时间:2024/05/22 11:40

        我看过比较多的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>");
     }
    }
   }
  }
 }
}


上面的代码我都编译通过,而且达到预期目的。