以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  目标树形式的授权人员生成目录树代码问题  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=46810)

--  作者:supwork
--  发布时间:2014/2/27 22:34:00
--  目标树形式的授权人员生成目录树代码问题

官方代码:

 

 

授权_AfterLoad

 

Dim trv1 As WinForm.TreeView = e.Form.Controls("TreeView1")

Dim trv2 As WinForm.TreeView = e.Form.Controls("TreeView2")

trv1.BuildTree("授权","分组|权限")

For Each u As UserInfo In Users

    If u.Type = UserTypeEnum.User Then \'排除管理员和开发者

        If trv2.Nodes.Contains(u.Group) = False Then

            trv2.Nodes.Add(u.Group)

        End If

        trv2.Nodes(u.Group).Nodes.Add(u.Name)

    End If

Next

Trv1.Nodes(0).Expand()

trv2.ExpandAll()

 

该段代码执行的时候,如果系统有用户未指定用户分组时,则程序执行会报错。

 

如果代码修正为:

 

Dim trv1 As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim trv2 As WinForm.TreeView = e.Form.Controls("TreeView2")
trv1.BuildTree("授权","分组|权限")
For Each u As UserInfo In Users
    If u.Group <> ""  ‘分组为空时过滤掉
        If u.Type = UserTypeEnum.User Then
            If trv2.Nodes.Contains(u.Group) = False Then
                trv2.Nodes.Add(u.Group)
            End If
            trv2.Nodes(u.Group).Nodes.Add(u.Name)
        End If
    End If
Next
Trv1.Nodes(0).Expand()
trv2.ExpandAll()

 

 

加上已上判断,程序运行不会报错。程序正常运行,但未分组用户不能显示在目录树中,从而不能进行授权。

此时能否做到,将分组为空的用户 ,全部自动归纳到“未分组”用户中,从而能进行用户授权。


--  作者:有点甜
--  发布时间:2014/2/27 22:39:00
--  
 改成这样

Dim trv1 As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim trv2 As WinForm.TreeView = e.Form.Controls("TreeView2")
trv1.BuildTree("授权","分组|权限")
For Each u As UserInfo In Users
    If u.Group = ""  
        group = "未分组"
    Else
        group = u.Group
    End If
    If u.Type = UserTypeEnum.User Then
        If trv2.Nodes.Contains(group) = False Then
            trv2.Nodes.Add(group)
        End If
        trv2.Nodes(group).Nodes.Add(u.Name)
    End If
Next
Trv1.Nodes(0).Expand()
trv2.ExpandAll()
[此贴子已经被作者于2014-2-27 22:39:39编辑过]

--  作者:supwork
--  发布时间:2014/2/27 23:12:00
--  

谢谢 但是运行不成功

 

系统报错 未定义变量 group

 

加上 Dim group As String

 

编辑窗口可以通过验证关闭。

 

但窗口打开时,运行还是提示错误,用户分给为空的用户,还是没有归到“未分组”中,也就还没有显示。


--  作者:supwork
--  发布时间:2014/2/27 23:19:00
--  

奇怪: 我修改之前的代码,总是如上所说。

 

但我复制2 楼的代码。再加上Dim group As String 执行正确。达到了效果


--  作者:supwork
--  发布时间:2014/2/27 23:26:00
--  

正确可行代码:

 

Dim trv1 As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim trv2 As WinForm.TreeView = e.Form.Controls("TreeView2")
Dim group As String
trv1.BuildTree("授权","分组|权限")
For Each u As UserInfo In Users
    If u.Group = "" 
        group = "未分组"
    Else
        group = u.Group
    End If
    If u.Type = UserTypeEnum.User Then
        If trv2.Nodes.Contains(group) = False Then
            trv2.Nodes.Add(group)
        End If
        trv2.Nodes(group).Nodes.Add(u.Name)
    End If
Next
Trv1.Nodes(0).Expand()
trv2.ExpandAll()


--  作者:lsy
--  发布时间:2014/2/28 7:22:00
--  
好,顶一个。
--  作者:supwork
--  发布时间:2014/2/28 8:11:00
--  

进一步,询问一下:该例子中有“增加分类”,“增加授权”,“重命名”,“删除”,双击即可修改功能,授权功能。其实只有授权功能普通经授权用户可以使用的,“增加分类”,“增加授权”,“重命名”,“删除”,双击即可修改功能,只有开发者才能合使用,修改变动了,在程序中要修改授权代码了。

 

请问如何做到,非开发者登陆,只能使用授权功能。而其它按钮均变灰色显示(操作无效模式)。


--  作者:Bin
--  发布时间:2014/2/28 8:19:00
--  
不就是多加一个判断,的事吗?   

If User.Type = UserTypeEnum.User Then 

就设置控件的 Enabled 属性

--  作者:supwork
--  发布时间:2014/2/28 23:35:00
--  

恩,看起来的确简单,但再简单的代码用得恰到好处可以解决大问题,真心希望官方放出来的实例,代码逻辑控制严密 。不仅仅是功能的简单注释,希望更有实际价值,在所有的情况下均不报错,有极强的容错功能。