Foxtable(狐表)用户栏目专家坐堂 → [求助]全局表的PrepareEdit事件


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

主题:[求助]全局表的PrepareEdit事件

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


加好友 发短信
等级:九尾狐 帖子:2239 积分:18446 威望:0 精华:0 注册:2011/11/26 20:21:00
[求助]全局表的PrepareEdit事件  发帖心情 Post By:2014/4/15 23:08:00 [只看该作者]

我用了一个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
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2239 积分:18446 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By: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

 回到顶部