以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]这个复杂的目录树授权,能实现吗!  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=72091)

--  作者:99473593
--  发布时间:2015/7/23 11:43:00
--  [求助]这个复杂的目录树授权,能实现吗!

请帮我看下,这样复杂的目录树授权能实现吗! 

 


 

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


图片点击可在新窗口打开查看此主题相关图片如下:目录树授权.jpg
图片点击可在新窗口打开查看
[此贴子已经被作者于2015/7/23 11:47:04编辑过]

--  作者:99473593
--  发布时间:2015/7/23 11:49:00
--  

忘了一点,就是取消权限时,需要子权限全部取消后,才能取消父权限!


--  作者:大红袍
--  发布时间:2015/7/23 11:49:00
--  

 参考 http://www.foxtable.com/help/topics/2405.htm

 


--  作者:大红袍
--  发布时间:2015/7/23 12:10:00
--  

mark 目录树授权

 

 

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


--  作者:99473593
--  发布时间:2015/7/23 12:16:00
--  

太厉害,这么快就弄好了

还有一点,需要实现在取消权限时,需要子权限全部取消后,才能取消父权限!能实现吗


--  作者:大红袍
--  发布时间:2015/7/23 12:16:00
--  
 看4楼。
--  作者:大红袍
--  发布时间:2015/7/23 12:17:00
--  

目录树全选

Dim nd,nd1 As  WinForm.TreeNode
nd = e.node
If nd.Nodes.Count > 0
    For Each nd1 In nd.AllNodes
        nd1.Checked = nd.Checked
    Next
End If
If e.node.Checked = False
    Do While  nd.parentnode IsNot Nothing
        nd = nd.parentnode
        If nd.Nodes.Count > 0
            For i As Integer = 0 To nd.Nodes.Count -1
                If nd.Nodes(i).Checked = True
                    Exit Do
                End If
                If i = nd.Nodes.Count -1
                    nd.Checked = False
                End If
            Next
        End If
    Loop
Else
    Do While  nd.parentnode IsNot Nothing
        nd = nd.parentnode
        nd.Checked = True
    Loop
End If


--  作者:99473593
--  发布时间:2015/7/23 14:19:00
--  

麻烦再看下,上面代码得到结果是,如果父权限勾选或取消,则子权限则全部勾选或取消,

这有个问题,因为某一具有父权限,并不意味着拥有全部的子权限,

 

需要实现的是在取消复选框前进行判断,如果下面的子权限还存在有勾选项,则不能取消勾选本权限

好像没有复选框改变前执行的事件 这能实现吗


--  作者:大红袍
--  发布时间:2015/7/23 14:47:00
--  
 Dim trv1 As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim trv2 As WinForm.TreeView = e.Form.Controls("TreeView2")
Dim nd1 As WinForm.TreeNode = trv1.SelectedNode
Dim dr As DataRow
If nd1.Level = 2 Then
    dr = DataTables("YHB").Find("YHB_DWBHMC = \'" & nd1.ParentNode.ParentNode.Name & "\' And YHB_BMBHMC = \'" & nd1.ParentNode.Name & "\' And YHB_YHBHMC = \'" & nd1.Name & "\'")
End If
If dr IsNot Nothing Then
    Dim nd As WinForm.TreeNode = e.node
    If e.node.Checked = False
        For Each tnd As WinForm.TreeNode In nd.AllNodes
            If tnd.Checked Then
                msgbox("不能取消")
                e.node.Checked = True
                Return
            End If
        Next
        Do While nd.parentnode IsNot Nothing
            nd = nd.parentnode
            If nd.Nodes.Count > 0
                For i As Integer = 0 To nd.Nodes.Count -1
                    If nd.Nodes(i).Checked = True
                        Exit Do
                    End If
                    If i = nd.Nodes.Count -1
                        nd.Checked = False
                    End If
                Next
            End If
        Loop
    Else
        Do While  nd.parentnode IsNot Nothing
            nd = nd.parentnode
            nd.Checked = True
        Loop
    End If
    Dim nms As String
    For Each nd2 As WinForm.TreeNode In trv2.AllNodes
        If nd2.Checked  Then
            If nd2.Level = 0 Then
                nms  = nms & "," & nd2.Name
            ElseIf nd2.Level = 1 Then
                nms  = nms & "," & nd2.ParentNode.Name & "\\" & nd2.Name
            ElseIf nd2.Level = 2 Then
                nms  = nms & "," & nd2.ParentNode.ParentNode.Name & "\\" & nd2.ParentNode.Name & "\\" & nd2.Name
            ElseIf nd2.Level = 3 Then
                nms  = nms & "," & nd2.ParentNode.ParentNode.ParentNode.Name & "\\" & nd2.ParentNode.ParentNode.Name & "\\" & nd2.ParentNode.Name & "\\" & nd2.Name
            Else
            End If
        End If
    Next
    If nms > "" Then
        dr("YHB_YHQX") = nms .Trim(",")
    Else
        dr("YHB_YHQX") = Nothing
    End If
End If

--  作者:judyhu2008
--  发布时间:2016/2/11 19:26:00
--  
MY,好厉害