当前位置:编程学习 > C#/ASP.NET >>

关于数据库权限嵌套的问题

我是新手,现在有一个权限表,表里有一类权限、二类权限
先读取一类权限,再读取二类权限,实现树形目录,同时还要判断该用户是否拥有此权限?如何实现?
我的方法是:
先用SqlDataReader读出一类权限,再用while (dr.Read())调出,然后再用while (dr.Read())读出二类权限,来实现!但……,错误!
请问各位,如何实现?
+--- 一类权限(1)
  ------二类权限(1-1)
  ------二类权限(1-2)
  ------二类权限(1-3)
  ------二类权限(1-4)
  ------二类权限(1-5)
  ......
+--- 一类权限(2)
  ------二类权限(2-1)
  ------二类权限(2-2)
  ------二类权限(2-3)
  ------二类权限(2-4)
  ------二类权限(2-5)
  ......
......

--------------------编程问答-------------------- 怎么没有高手帮忙呢?我自己顶下 --------------------编程问答-------------------- 这样最好不要用Reader,以前做过个类似的是用DataSet来做的 --------------------编程问答-------------------- 选查询放在一个DataTable中,再遍历行,如果父节点为0就把一类权限(1)加在根下,否则加下对应父节点的根下 --------------------编程问答-------------------- 数据控件的嵌套问题


    protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        SqlDataSource sds2 = (SqlDataSource)e.Item.FindControl("SqlDataSourceContinent");
        if (sds2 != null)
        {
            IDataReader idr = (IDataReader)SqlDataSource1.Select(DataSourceSelectArguments.Empty);
            if (idr.Read())
            {
                if (!string.IsNullOrEmpty(Convert.ToString(idr["sh_svc"])))
                    sds2.SelectParameters["sh_svc"].DefaultValue = Convert.ToString(idr["sh_svc"]);
            }
        }
    } --------------------编程问答-------------------- 楼上方法可行 --------------------编程问答-------------------- 权限在数据库里采用自联表
所有结果集读入datatable
关闭连接
用递归将datatable里的数据按等级读出 --------------------编程问答-------------------- 使用两个数据集:一级和二级权限;可以使用dt或者ds
递归绑定树控件;就可以了 --------------------编程问答-------------------- //绑定菜单树
    private void BindTree(TreeView tree)
    {
        string Type = GetTreeType();
        if (Type == "")
        {
            Type = "1";
        }
        MenuBLL Menu = new MenuBLL();
        //获取数据集
        DataSet ds = Menu.GetList("");
        //绑定树
        TreeNode node = new TreeNode(this.lblTitle.Text);
        node.Value = "0";
        node.NavigateUrl = GetUrl(Type) + Server.UrlEncode(node.Value);
        node.Target = "childmain";
        tree.Nodes.Add(node);
        BindSubTree(node, "0", ds);
    }

    //递归函数
    private void BindSubTree(TreeNode node, string ParenID, DataSet ds)
    {
        string Type = GetTreeType();
        DataRow[] rows = ds.Tables[0].Select("ParentID=" + ParenID);
        for (int i = 0; i < rows.Length; i++)
        {
            TreeNode Subnode = new TreeNode();
            Subnode.Text = rows[i]["MenuName"].ToString();
            Subnode.Value = rows[i]["MenuID"].ToString();
            Subnode.Target = "childmain";
            Subnode.NavigateUrl = GetUrl(Type) + Server.UrlEncode(rows[i]["MenuID"].ToString());
            node.ChildNodes.Add(Subnode);
            BindSubTree(Subnode, Subnode.Value, ds);
        }
    }
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,