以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  目录树的选定状态  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=67426)

--  作者:blsu33
--  发布时间: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
--  发布时间: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
--  发布时间: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
--  发布时间:2015/4/24 8:53:00
--  
第二个问题的原理是 你已经写好了更新datetable(“权限管理”)的“角色”列 没有必要再写一遍,你只需要为CHecked属性复制,它会触发事件,自己走一遍流程.
--  作者:blsu33
--  发布时间: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
--  发布时间:2015/4/27 14:42:00
--  
上例子吧
--  作者:blsu33
--  发布时间:2015/4/27 14:49:00
--  
BIN,老师,
第二个问题也放在里面了,也有问题,能力有限,没有弄明白您说的。

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



--  作者:Bin
--  发布时间:2015/4/27 14:58:00
--  
第二个问题之前不是给你写好了么?   第一个问题我记得之前都完成的了啊
--  作者:blsu33
--  发布时间: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
--  发布时间:2015/4/27 15:14:00
--  
和帮助是完全一样的,你要改的只是不同级别的节点,多加哥条件判断而已.你直接复制帮助代码即可