以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]全局表的PrepareEdit事件 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=49319) |
-- 作者:chnfo -- 发布时间:2014/4/15 23:08:00 -- [求助]全局表的PrepareEdit事件 我用了一个TopicBar来做导航。 定义了三个全局代码 Public SoftUserID As String \'定义当前登陆用户ID,这个在登录窗口中记录下来登录者的ID Public RightTb As Table \'定义当前link对应的主表 Public RightLink As WinForm.TopicLink \'定义当前选中的link 然后把权限设置放在一个表中 DataTables("TbUserRights") 因为工具软件涉及到很多表要审核和反审核,想到用项目的全局表事件PrepareEdit来做可能维护工作量会小一点。代码如下: If Forms("TopicBar").Opened = True AndAlso RightLink.Name > "" Then ‘如果导航窗口打开且当前选中了某一个Link’ Dim dr As DataRow = DataTables("TbUserRights").Find("UserID = \'" & SoftUserID & "\' and LinkCode = \'" & RightLink.Name & "\'") If e.Table.Name = RightTb.Name AndAlso dr IsNot Nothing Then If e.Table.Cols.Contains("审核") Then ‘如果当前表包含了审核列’ Select Case e.Col.Name Case "Audit" If dr("审核") = False Or ( dr("反审核")= true AndAlso e.Row("审核") = False ) Then \'如果没有审核权限或者有反审权限但并未审核,则取消操作 e.Cancel = True End If End Select End If End If End If 结果运行之后,提示错误如下: .NET Framework 版本:2.0.50727.5477 Foxtable 版本:2014.3.7.1 错误所在事件:全局表事件,PrepareEdit 详细错误信息: 调用的目标发生了异常。 未将对象引用设置到对象的实例。 请教是哪里出了问题? 补充:我在注释掉PrepareEdit事件的代码后,进入系统,在命令窗口输入 Output.Show(RightLink.Name) Output.Show(RightTb.Name) 结果提示: 代码执行出错,错误信息:System.NullReferenceException: 未将对象引用设置到对象的实例。在UserCode.Test() 这可能是说没有找到RightLink ---所以,能增加一个Link选中的属性吗? [此贴子已经被作者于2014-4-15 23:25:58编辑过]
|
-- 作者:chnfo -- 发布时间:2014/4/16 0:03:00 -- 自己试了一下,调整了一下顺序,貌似可以用了 If RightTb isnot nothing andalso e.Table.Name = RightTb.Name then Dim dr As DataRow = DataTables("TbUserRights").Find("UserID = \'" & SoftUserID & "\' and LinkCode = \'" & RightLink.Name & "\'") If dr IsNot Nothing Then If e.Table.Cols.Contains("审核") Then ‘如果当前表包含了审核列’ Select Case e.Col.Name Case "Audit" If dr("审核") = False Or ( dr("反审核")= true AndAlso e.Row("审核") = False ) Then \'如果没有审核权限或者有反审权限但并未审核,则取消操作 e.Cancel = True End If End Select End If End If End If |