关于数据库权限嵌套的问题
我是新手,现在有一个权限表,表里有一类权限、二类权限先读取一类权限,再读取二类权限,实现树形目录,同时还要判断该用户是否拥有此权限?如何实现?
我的方法是:
先用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