以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 权限设置报错“未引用实例对象” (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=123599) |
||||
-- 作者:weibu -- 发布时间: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 |
||||
-- 作者:有点蓝 -- 发布时间: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 -- 发布时间:2018/8/19 10:06:00 -- 好的,谢谢。我有串代码组织了两小时,没结果。想点击treeview1里面的afterchecknode事件。如果点击一级节点,把窗体combobox1的值写到授权表里,要求写到一级节点=授权表-模块列中的值的行;如果二级节点选中,写到授权表-模块-子模块对应的行? |
||||
-- 作者:weibu -- 发布时间: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编辑过]
|
||||
-- 作者:有点蓝 -- 发布时间:2018/8/19 10:09:00 -- 看这里的用法:http://www.foxtable.com/webhelp/scr/2405.htm 看不懂就上传具体实例
|
||||
-- 作者:weibu -- 发布时间:2018/8/19 10:31:00 --
就是里面有个授权窗口,想点击treeview1里面的afterchecknode事件。如果点击一级节点,把窗体combobox1的值写到授权表里,要求写到一级节点=授权表-模块列中的值的行;如果二级节点选中,写到授权表-模块-子模块对应的行?
|
||||
-- 作者:有点蓝 -- 发布时间: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 -- 发布时间:2018/8/19 11:10:00 -- 太强了“蓝哥”膜拜,我得好好看看 |
||||
-- 作者:weibu -- 发布时间: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编辑过]
|
||||
-- 作者:有点蓝 -- 发布时间: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
|