以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]关于目录树授权的一个细节问题!【例子已上传】  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=15526)

--  作者:gaoyong30000
--  发布时间:2011/12/29 16:52:00
--  [求助]关于目录树授权的一个细节问题!【例子已上传】
选择了财务部,点击右边目录树的A卡管理后    授权表上是添加的财务部


图片点击可在新窗口打开查看此主题相关图片如下:1111.jpg
图片点击可在新窗口打开查看


但是我要求是添加的左边财务部下面的 三个岗位到授权表里,例如:

图片点击可在新窗口打开查看此主题相关图片如下:2.jpg
图片点击可在新窗口打开查看


右边目录树Afterchecknode代码如下,请问如何更改:
Dim tr1 As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim tr2 As WinForm.TreeView = e.Form.Controls("TreeView2")
Dim nd1 As WinForm.TreeNode = tr1.SelectedNode
Dim nd2 As WinForm.TreeNode = tr2.SelectedNode
Dim dr As DataRow
If tr2.Focused AndAlso nd1 IsNot Nothing  Then
    If nd2.Level <> 0 Then
        dr = DataTables("授权").Find("权限 = \'" & nd2.Text & "\'")
        If nd2.Checked = True Then
            dr("用户") = nd1.Text.trim("←") + "," + dr("用户")
        Else
            dr("用户") = dr("用户").Replace(nd1.Text.trim("←"),"")
        End If
        dr("用户") = dr("用户").Trim(",")
    End If
    For Each nd As WinForm.TreeNode In e.Node.AllNodes
        dr = DataTables("授权").Find("权限 = \'" & nd.Text.trim("←") & "\'")
        nd.Checked  = e.Node.Checked
        If nd.Checked = True Then
            dr("用户") = nd1.Text.trim("←") + "," + dr("用户")
        Else
            dr("用户") = dr("用户").Replace(nd1.Text.trim("←"),"")
            dr("用户") = dr("用户").Trim(",")
        End If
    Next
End If
[此贴子已经被作者于2011-12-30 10:09:33编辑过]

--  作者:gaoyong30000
--  发布时间:2011/12/29 23:19:00
--  
该怎么弄啊~~
--  作者:狐狸爸爸
--  发布时间:2011/12/30 9:06:00
--  

将你的例子发上来


--  作者:gaoyong30000
--  发布时间:2011/12/30 10:09:00
--  

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

 

 例子已上传


--  作者:狐狸爸爸
--  发布时间:2011/12/30 11:12:00
--  
Dim tr1 As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim tr2 As WinForm.TreeView = e.Form.Controls("TreeView2")
If tr2.Focused  AndAlso e.node.Level > 0  Then
    Dim nd1 As WinForm.TreeNode = tr1.SelectedNode
    Dim nd2 As WinForm.TreeNode = e.node
    Dim dr As DataRow
    Dim nds As New List(of winform.treenode)
    If nd1.Nodes.count = 0 Then
        nds.add(nd1)
    Else
        nds.addrange(nd1.nodes)
    End If
    For Each nd As WinForm.TreeNode In nds
        dr = DataTables("授权").Find("权限 = \'" & nd2.Text & "\'")
        Dim nms As New List(of String)
       nms.Addrange(dr("用户").trim(",").split(","))
        Dim nm As String  = nd.Text.trim("←")
        If nd2.Checked = True Then
            If nms.Contains(nm) = False Then
                nms.add(nm)
            End If
        Else
            If nms.Contains(nm) Then
                nms.Remove(nm)
            End If
        End If
        dr("用户") = String.Join(",",nms.ToArray)
    Next
End If

--  作者:gaoyong30000
--  发布时间:2011/12/30 13:56:00
--  

老大 还有个情况 没纳入代码里面!

 

If tr2.Focused  AndAlso e.node.Level = 0  Then

 

例如:左边目录树选择备件部,右边目录树选 A卡管理 为true后其根节点都会为true  而且会在授权表中权限分组为 A卡管理 的所有行里添加 备件下面的所有岗位!

 

        还有个功能 就是右边目录树 如果子节点全部为true 其父节点 也会为true

 


图片点击可在新窗口打开查看此主题相关图片如下:1.jpg
图片点击可在新窗口打开查看
[此贴子已经被作者于2011-12-30 13:58:17编辑过]

--  作者:狐狸爸爸
--  发布时间:2011/12/30 14:15:00
--  

呵呵,其实帮助的例子很好,何必这么辛苦的自己做呢,可以单项授权,也可以整个分类授权,不是更灵活和实用吗?

这种玩意,可不是随便能改的,需要非常老练才行:

 

Dim tr1 As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim tr2 As WinForm.TreeView = e.Form.Controls("TreeView2")
If tr2.Focused AndAlso e.node.Level = tr2.SelectedNode.Level Then
    Dim dr As DataRow
    Dim nds1 As New List(of winform.treenode)
    If tr1.SelectedNode.Nodes.count = 0 Then
        nds1.add(tr1.SelectedNode)
    Else
        nds1.addrange(tr1.SelectedNode.nodes)
    End If
    Dim nds2 As New List(of winform.treenode)
    If tr2.SelectedNode.Nodes.count = 0 Then
        nds2.add(tr2.SelectedNode)
    Else
        nds2.addrange(tr2.SelectedNode.nodes)
    End If
    For Each nd1 As WinForm.TreeNode In nds1
        For Each nd2 As winform.treenode In nds2
            dr = DataTables("授权").Find("权限 = \'" & nd2.Text & "\'")
            Dim nms As New List(of String)
            nms.Addrange(dr("用户").trim(",").split(","))
            Dim nm As String  = nd1.Text.trim("←")
            If tr2.SelectedNode.Checked = True Then
                If nms.Contains(nm) = False Then
                    nms.add(nm)
                End If
            Else
                If nms.Contains(nm) Then
                    nms.Remove(nm)
                End If
            End If
            If nd2.Checked <> tr2.SelectedNode.Checked Then
                nd2.Checked = tr2.SelectedNode.Checked
            End If
            dr("用户") = String.Join(",",nms.ToArray)
        Next
    Next
End If

 

 

 

 

 

 

 

 

 


--  作者:gaoyong30000
--  发布时间:2011/12/30 15:07:00
--  

是啊 被绕得头疼死了   多谢老大了!