Foxtable(狐表)用户栏目专家坐堂 → 目录树的选定状态


  共有3110人关注过本帖树形打印复制链接

主题:目录树的选定状态

帅哥哟,离线,有人找我吗?
blsu33
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2927 积分:20167 威望:0 精华:0 注册:2012/2/3 17:45:00
目录树的选定状态  发帖心情 Post By:2015/4/24 8:35:00 [只看该作者]

老师,

这个帖子:http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=67353&authorid=0&page=2&star=1

  昨天回去测试,有两个问题,不知道怎么改。

第一个 角色的目录树,切换经理与新角色,权限的目录树的选定状态与datetable(“权限管理”)的“角色”列的数据不一致,应该是角色的目录树的下列代码不对,求老师在给看下:

Vars("Tree") = False
For Each nd2 As WinForm.TreeNode In tr2.AllNodes
    For Each dr As DataRow In DataTables("权限管理").DataRows
        If nd2.Text = dr("功能主模块") And dr("角色").Contains(nd1.Text) Then
            nd2.Checked = True
        End If
        If nd2.Text =dr("一级模块") And dr("角色").Contains(nd1.Text) Then
            nd2.Checked = True
            nd2.ParentNode.Checked = True
        End If
        If nd2.Text = dr("二级模块") And dr("角色").Contains(nd1.Text) Then
            nd2.Checked = True
            nd2.ParentNode.Checked = True
            nd2.ParentNode.ParentNode.Checked = True
        End If
        If nd2.Text = dr("权限") And dr("角色").Contains(nd1.Text) Then
            nd2.ParentNode.Checked = True
            nd2.ParentNode.ParentNode.Checked = True
            nd2.ParentNode.ParentNode.ParentNode.Checked = True
        End If
       
    Next
Next
Vars("Tree") = True


 回到顶部
帅哥哟,离线,有人找我吗?
blsu33
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2927 积分:20167 威望:0 精华:0 注册:2012/2/3 17:45:00
  发帖心情 Post By:2015/4/24 8:39:00 [只看该作者]

第二个问题,是想权限目录树点击父级的节点,自动选定子集的节点,同时,更新datetable(“权限管理”)的“角色”列:

下面4段代码昨天注释掉了,应该怎么加进去呢

 'For Each nd As WinForm.TreeNode In e.Node.AllNodes
                'dr = DataTables("权限管理").Find("功能主模块= '" & nd.Text & "' And 权限 Is Null")
                'nd.Checked  = e.Node.Checked
                'If dr IsNot Nothing Then
                    'If nd.Checked = True Then
                        'dr("角色") = nd1.Text + "/" + dr("角色")
                    'Else
                        'dr("角色") = dr("角色").Replace(nd1.Text,"")
                    'End If
                    'dr("角色") = dr("角色").Trim("/")
                'End If
            'Next


 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2015/4/24 8:50:00 [只看该作者]

第一个问题.按照帮助的做,利用FIND 不要遍历N次


第二个问题
For Each nd As WinForm.TreeNode In e.Node.AllNodes
                nd.Checked  = e.Node.Checked
Next

 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2015/4/24 8:53:00 [只看该作者]

第二个问题的原理是 你已经写好了更新datetable(“权限管理”)的“角色”列 没有必要再写一遍,你只需要为CHecked属性复制,它会触发事件,自己走一遍流程.

 回到顶部
帅哥哟,离线,有人找我吗?
blsu33
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2927 积分:20167 威望:0 精华:0 注册:2012/2/3 17:45:00
  发帖心情 Post By:2015/4/27 14:15:00 [只看该作者]

BIN 老师,
   第一个问题我进行了修改,
Dim nd2 As WinForm.TreeNode = tr2.SelectedNode

Select Case nd1.Level
    Case 0
        tr2.BuildTree("权限管理","功能主模块|一级模块|二级模块|权限",,"_SortKey")
    Case Else
        For Each dr As DataRow In DataTables("权限管理").DataRows
            If dr("角色").Contains(nd1.ParentNode.Text) Then
                dr("显示") = True
            Else
                dr("显示") = False
            End If
        Next
        tr2.BuildTree("权限管理","功能主模块|一级模块|二级模块|权限","[显示] = 'true'","_SortKey")
        If tr2.AllNodes.count = 0 And nd1.text.StartsWith("新") = False Then
            MessageBox.Show("请先设置父级角色的权限!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
        End If
        
End Select

Vars("Tree") = False
Dim dr1 As DataRow
Select Case e.Node.Level
    Case 0
        dr1 = DataTables("权限管理").Find("功能主模块 = '" & e.Node.Name & "' And 权限 Is Null")
    Case 1
        dr1 = DataTables("权限管理").Find("功能主模块 = '" & e.Node.ParentNode.Name & "' And  一级模块 = '" & e.Node.Name & "' And 权限 Is Null ")
    Case 2
        dr1 = DataTables("权限管理").Find("功能主模块 = '" & e.Node.ParentNode.ParentNode.Name & "' And  一级模块 = '" & e.Node.ParentNode.Name & "' And  二级模块 = '" & e.Node.Name & "' And 权限 Is Null ")
    Case 3
        dr1 = DataTables("权限管理").Find("功能主模块 = '" & e.Node.ParentNode.ParentNode.ParentNode.Name & "' And  一级模块 = '" & e.Node.ParentNode.ParentNode.Name & "' And  二级模块 = '" & e.Node.ParentNode.Name & "'And  权限 = '" & e.Node.Name & "'")
End Select
Dim nms As New List(of String)
If dr1 IsNot Nothing AndAlso dr1.IsNull("角色") = False
    nms.AddRange(dr1("角色").Split(","))
End If
For Each nd As WinForm.TreeNode In tr2.AllNodes
    nd.Checked = nms.Contains(nd.Name)
Next
Vars("Tree") = True

想要达到点击目录树1角色 ,让目录树2显示已经选定的权限范围,未显示,麻烦老师看一下,哪里有误。

 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2015/4/27 14:42:00 [只看该作者]

上例子吧

 回到顶部
帅哥哟,离线,有人找我吗?
blsu33
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2927 积分:20167 威望:0 精华:0 注册:2012/2/3 17:45:00
  发帖心情 Post By:2015/4/27 14:49:00 [只看该作者]

BIN,老师,
第二个问题也放在里面了,也有问题,能力有限,没有弄明白您说的。

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:角色.rar



 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2015/4/27 14:58:00 [只看该作者]

第二个问题之前不是给你写好了么?   第一个问题我记得之前都完成的了啊

 回到顶部
帅哥哟,离线,有人找我吗?
blsu33
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2927 积分:20167 威望:0 精华:0 注册:2012/2/3 17:45:00
  发帖心情 Post By:2015/4/27 15:07:00 [只看该作者]

老师,
之前的例子,切换左面的目录树(经理/新角色),右面的权限,选定状态,不正确。
希望通过,左面的目录树的同步右面的权限,选定状态
代码是这个:
......
Vars("Tree") = False
Dim dr1 As DataRow
Select Case e.Node.Level
    Case 0
        dr1 = DataTables("权限管理").Find("功能主模块 = '" & e.Node.Name & "' And 权限 Is Null")
    Case 1
        dr1 = DataTables("权限管理").Find("功能主模块 = '" & e.Node.ParentNode.Name & "' And  一级模块 = '" & e.Node.Name & "' And 权限 Is Null ")
    Case 2
        dr1 = DataTables("权限管理").Find("功能主模块 = '" & e.Node.ParentNode.ParentNode.Name & "' And  一级模块 = '" & e.Node.ParentNode.Name & "' And  二级模块 = '" & e.Node.Name & "' And 权限 Is Null ")
    Case 3
        dr1 = DataTables("权限管理").Find("功能主模块 = '" & e.Node.ParentNode.ParentNode.ParentNode.Name & "' And  一级模块 = '" & e.Node.ParentNode.ParentNode.Name & "' And  二级模块 = '" & e.Node.ParentNode.Name & "'And  权限 = '" & e.Node.Name & "'")
End Select
Dim nms As New List(of String)
If dr1 IsNot Nothing AndAlso dr1.IsNull("角色") = False
    nms.AddRange(dr1("角色").Split(","))
End If
For Each nd As WinForm.TreeNode In tr2.AllNodes
    nd.Checked = nms.Contains(nd.Name)
Next
Vars("Tree") = True

 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2015/4/27 15:14:00 [只看该作者]

和帮助是完全一样的,你要改的只是不同级别的节点,多加哥条件判断而已.你直接复制帮助代码即可


 回到顶部
总数 14 1 2 下一页