我想做
根据不同用户登陆,所看到的treeview的节点不同.而且每个节点都是有链接的.
我想法是在数据库建立一个用户与节点对应关系表,然后根据数据库来加载节点信息.
到底是不是这样的呢?各位给点意见.
我看了好多相关的贴子,很多说加载节点,但没有链接的,也没有对应不同ID加载表.请教.!!
我猜想表是不是这样
用户ID  节点名  节点链接地址 ??
然后加载的时候做个添加节点的代码>
各位能不能具体给点代码或构想.

解决方案 »

  1.   

    生成treeview的时候就做处理,有权限的用户才生成相应的结点,可以建一个用户权限表,生成treeview的时候,哪个用户拥有那些权限从权限表中读出
      

  2.   

    表结构如何比如我想实现:
    营销
        个人
        公司
    后台
        个人
        大客户类似,用户A只能看到营销->个人->公司 看不到后台的,B用户都可以看到.
    还有那个链接的地址也是放在数据库中吗?楼上能不能具体点.最好给点实例代码.谢谢
      

  3.   

    刚做一个系统就用到了这个,在数据库用一个字符串表示权限,用一个xml文件定义权限,包括权限含义、用第几位字符表示、父权限等(这个用数据库也可以),读取出特定用户的权限字符串,然后根据xml的定义生成树,具体代码就不帖了,一个一个节点加就是了
      

  4.   

    先参考这个网址,不行我给你一个示例:
    http://community.csdn.net/Expert/topic/4124/4124603.xml?temp=.5802729
      

  5.   

    在表中加标志
    load 树时用sql过滤
      

  6.   

    数据源的时候就过滤,在绑定到DataSource上不就行了
      

  7.   

    不是很明白你所说的链接是什么意思,node的属性里面有NavigateUrl,和Target属性,不符合你的要求吗?
      

  8.   

    權限表應該與生成樹表關聯,這樣,在生成樹時只要sql="select ....where ...."即可。
      

  9.   

    在你的表中添加用户权限级别,生成树时,条件中添加 where userGrade>=级别数 即可
      

  10.   

    private string[] strMyNames=new string[] {"基础数据管理","码头管理","服务类型","票价类型","员工管理",
                                                       "客户管理","船舶管理","船舶资料管理","船舶设施摆放",""};
    //各个节点的文本属性
    private string[] strUrl=new string[] {"","dock.aspx","fwlx.aspx","pjlx.aspx","yggl.aspx","clients.aspx","","",""};
    //各个节点所指向的页面的名称
    private int[] nodeType=new int[] {1,2,2,2,1,1,1,2,2};//各个节点在树型控件中的层次 private int nodesCount=11;//表示在权限管理界面中该模块名下的子功能数
    private string strTarget="zlglRight";//模块中界面的目标位置
    private string ClientRights;//客户管理的分权限,2位,第一位表示是否可查看客户,第二位表示是否只能查看本登录者所属客户

    private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    string strTemp="";
    string strMyRights="";
    //*************这里各个界面可能不一样,树型控件的名称是特殊的***************
    this.TreeView1.Nodes[0].Nodes.Clear();
    if(Session["资料管理"]!=null)
    {
    strTemp=Session["资料管理"].ToString();
    }
    if(strTemp.Length==nodesCount)
    {
    //分解权限字符串
    //因为11位的权限字符串中,有2个是同一界面下的子权限,没有对应的页面,所以要进行分解,
    //同时也要保存好这些子权限,通过Session的方式传递到相应的页面去使用
    strMyRights=strTemp.Substring(0,6)+strTemp.Substring(8,3);//界面权限位
    ClientRights=strTemp.Substring(6,2);//某一界面下的子权限
    this.Session.Add("isAll",ClientRights);//设置Session中的key,保存界面的子权限 //*******************如果没有无对应界面的子权限,则直接执行下面的函数*********************************
    IniMenu(strMyRights,strMyNames,strUrl,nodeType,strTarget);//初始化模块菜单,只显示其权限所允许的界面指向节点
    }
    } /// <summary>
    /// 初始化界面,参数依次为:界面权限字符串,界面名称字符数组,界面层次数组,目标地址字符串
    /// </summary>
    private void IniMenu(string strRights,string[] strNames,string[] mUrl,int[] mLevers,string mTarget)
    {
    Microsoft.Web.UI.WebControls.TreeNode tnParent=null;
    if(strNames.Length==strRights.Length)
    {
    Microsoft.Web.UI.WebControls.TreeNode tn;
    for(int loop=0;loop<strRights.Length;loop++)
    {
    if(strRights[loop]=='1')
    {
    tn=new Microsoft.Web.UI.WebControls.TreeNode();
    tn.Text=strMyNames[loop];
    tn.NavigateUrl=mUrl[loop];
    tn.Target=mTarget;
    tn.Expandable=Microsoft.Web.UI.WebControls.ExpandableValue.Auto;
    tn.Expanded=true;
    switch(mLevers[loop])
    {
    case 1:
    tnParent=tn;
    this.TreeView1.Nodes[0].Nodes.Add(tn);//使用本届面的树型控件名称,不一定是treeview1
    break;
    case 2:
    if(tnParent!=null)
    {
    tnParent.Nodes.Add(tn);
    }
    break;
    }
    }
    else if(strRights[loop]=='0')
    {
    }
    }
    }
    }
      

  11.   

    在解析生长treeview的时候做判断符合条件的执行一段解析,else又执行一段程序。