Foxtable(狐表)用户栏目专家坐堂 → 权限设置报错“未引用实例对象”


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

主题:权限设置报错“未引用实例对象”

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


加好友 发短信
等级:三尾狐 帖子:662 积分:5405 威望:0 精华:0 注册:2018/5/19 22:27:00
权限设置报错“未引用实例对象”  发帖心情 Post By:2018/8/18 21:59:00 [只看该作者]

想实现点击打开窗口后,检索到授权表的职位中包含“管理者”的模块子模块对应的目录树的复选框打勾
老报错请帮忙看下
代码如下:Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
trv.BuildTree("授权","模块|子模块")
trv.ExpandAll()
Dim dr As DataRow
For Each nd As WinForm.TreeNode In trv.AllNodes
   dr = DataTables("授权").Find("模块 = '" & nd.ParentNode.Name & "' And 子模块 = '" & nd.Name & "'")
    Dim Str As String = dr("职位")
  If Str > "" AndAlso Str.Contains("管理者") Then
    nd.Checked = True
  End If
Next

图片点击可在新窗口打开查看此主题相关图片如下:qq截图20180818215819.png
图片点击可在新窗口打开查看


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

图片点击可在新窗口打开查看此主题相关图片如下:授权表.png
图片点击可在新窗口打开查看



 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:113535 积分:578176 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/8/19 9:13:00 [只看该作者]

Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
trv.BuildTree("授权","模块|子模块")
trv.ExpandAll()
Dim dr As DataRow
For Each nd As WinForm.TreeNode In trv.AllNodes
    If nd.Level <> 0 Then '第一层节点没有ParentNode
        dr = DataTables("授权").Find("模块 = '" & nd.ParentNode.Name & "' And 子模块 = '" & nd.Name & "'")
        Dim Str As String = dr("职位")
        If Str > "" AndAlso Str.Contains("管理者") Then
            nd.Checked = True
        End If
    End If
Next

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


加好友 发短信
等级:三尾狐 帖子:662 积分:5405 威望:0 精华:0 注册:2018/5/19 22:27:00
  发帖心情 Post By:2018/8/19 10:06:00 [只看该作者]

好的,谢谢。我有串代码组织了两小时,没结果。想点击treeview1里面的afterchecknode事件。如果点击一级节点,把窗体combobox1的值写到授权表里,要求写到一级节点=授权表-模块列中的值的行;如果二级节点选中,写到授权表-模块-子模块对应的行?

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


加好友 发短信
等级:三尾狐 帖子:662 积分:5405 威望:0 精华:0 注册:2018/5/19 22:27:00
  发帖心情 Post By:2018/8/19 10:06:00 [只看该作者]

如果取消复选框打勾,值相应去掉
组织的代码很乱,理不清:
If e.Node.ParentNode IsNot Nothing Then '取消父节点的选中标记,因为选中子节点,就不要选中父节点了
    e.Node.ParentNode.Checked = False
End If
For Each nd As WinForm.TreeNode In e.Node.AllNodes
    nd.Checked  = e.Node.Checked
Next
Dim trv1 As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim nd1 As WinForm.TreeNode = trv1.SelectedNode
Dim dr As DataRow
If nd1.Level = 0 Then
    dr = DataTables("授权").Find("模块 = '" & nd1.Name & "'")
Else
    dr = DataTables("授权").Find("模块 = '" & nd1.ParentNode.Name & "' And 子模块 = '" & nd1.Name & "'")
End If
If dr IsNot Nothing Then
    Dim nms As String
    For Each nd2 As WinForm.TreeNode In trv1.AllNodes
        If nd2.Checked  Then
            nms  = nms & "," &  nd2.Name
        End If
    Next
    If nms > "" Then
        dr("职位") = nms.Trim(",")
    Else
        dr("职位") = Nothing
    End If
End If

Dim st As String = e.Form.Controls("ComboBox1").Value

[此贴子已经被作者于2018/8/19 10:10:35编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:113535 积分:578176 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/8/19 10:09:00 [只看该作者]

看这里的用法:http://www.foxtable.com/webhelp/scr/2405.htm

看不懂就上传具体实例

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


加好友 发短信
等级:三尾狐 帖子:662 积分:5405 威望:0 精华:0 注册:2018/5/19 22:27:00
  发帖心情 Post By:2018/8/19 10:31:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:微步溯源.foxdb


就是里面有个授权窗口,想点击treeview1里面的afterchecknode事件。如果点击一级节点,把窗体combobox1的值写到授权表里,要求写到一级节点=授权表-模块列中的值的行;如果二级节点选中,写到授权表-模块-子模块对应的行?

 回到顶部
帅哥,在线噢!
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:113535 积分:578176 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/8/19 10:59:00 [只看该作者]

If e.Node.ParentNode IsNot Nothing Then '取消父节点的选中标记,因为选中子节点,就不要选中父节点了
    e.Node.ParentNode.Checked = False
End If
For Each nd As WinForm.TreeNode In e.Node.AllNodes
    nd.Checked  = e.Node.Checked
Next
Dim st As String = e.Form.Controls("ComboBox1").Value
Dim trv1 As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim nd1 As WinForm.TreeNode = trv1.SelectedNode
Dim dr As DataRow
Dim Lst As new List(of String)
If nd1.Level = 0 Then
    For Each dr In DataTables("授权").Select("模块 = '" & nd1.Name & "'")
        Lst.Clear
        If dr.IsNull("职位")
            If nd1.Checked Then
                dr("职位") = st
            End If
        Else
            Lst.AddRange(dr("职位").split(","))
            If nd1.Checked Then
                If lst.Contains(st) = False Then lst.Add(st)
            Else
                If lst.Contains(st)  Then lst.Remove(st)
            End If
            dr("职位") = String.Join(",",lst.ToArray)
        End If
    Next
Else
    dr = DataTables("授权").Find("模块 = '" & nd1.ParentNode.Name & "' And 子模块 = '" & nd1.Name & "'")
    If dr IsNot Nothing Then
        Lst.Clear
        If dr.IsNull("职位")
            If nd1.Checked Then
                dr("职位") = st
            End If
        Else
            Lst.AddRange(dr("职位").split(","))
            If nd1.Checked Then
                If lst.Contains(st) = False Then lst.Add(st)
            Else
                If lst.Contains(st)  Then lst.Remove(st)
            End If
            dr("职位") = String.Join(",",lst.ToArray)
        End If
        
    End If
End If

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


加好友 发短信
等级:三尾狐 帖子:662 积分:5405 威望:0 精华:0 注册:2018/5/19 22:27:00
  发帖心情 Post By:2018/8/19 11:10:00 [只看该作者]

太强了“蓝哥”膜拜,我得好好看看

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


加好友 发短信
等级:三尾狐 帖子:662 积分:5405 威望:0 精华:0 注册:2018/5/19 22:27:00
  发帖心情 Post By:2018/8/19 11:21:00 [只看该作者]

这段代码我想实现如果“授权”表里没有登陆者的职位,他登陆后就看不到相应菜单,执行后的结果怎么不对?
如果模块列的值为PDA则不检索

Dim dr2 As DataRow = DataTables("用户信息").find("用户名 = '" & 用户名 & "'")  '找到当前登录者所在的行
For Each dr1 As DataRow In DataTables("授权").DataRows
'首先判断分组的授权用户是否包括此用户或此用户所属的分组
If dr1.IsNull("职位") = False Andalso dr1("模块")<>"PDA" Then
    Dim nms() As String = dr1("职位").Split(",")
    For Each nm As String In nms
        If nm <> dr2("职位")  Then '如果授权职位不包含登陆者职位
               If dr1.IsNull("子模块") = False Then
                  RibbonTabs(dr1("模块")).Groups(dr1("分组名")).Items(dr1("子模块")).Visible = False 
               End If
         End If
     Next
 End If
 Next
[此贴子已经被作者于2018/8/19 11:21:50编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:113535 积分:578176 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/8/19 11:35:00 [只看该作者]

Dim dr2 As DataRow = DataTables("用户信息").find("用户名 = '" & 用户名 & "'")  '找到当前登录者所在的行
Dim zw As String = "," & dr2("职位") & ","
For Each dr1 As DataRow In DataTables("授权").Select("模块 <> 'PDA' and 子模块 is not null")
    If ("," & dr1("职位") & ",").contains(zw) = False
        RibbonTabs(dr1("模块")).Groups(dr1("分组名")).Items(dr1("子模块")).Visible = False
    End If
Next

 回到顶部
总数 21 1 2 3 下一页