以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  全局表事件 判断  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=113299)

--  作者:yifan3429
--  发布时间:2018/1/12 19:53:00
--  全局表事件 判断
If e.Row("审核") = True AndAlso User.Name <> "皮新华" Then
    e.Cancel = True
    MessageBox.Show("审核权限不够!")    
ElseIf e.Row("审核") = True Then \'如果此行已经审批了,则禁止修改
    e.Cancel = True
    MessageBox.Show("审核不能更改!")
End If


上面代码是正对每一个表
但是有些表没有审核的列
就会报错

怎么判断排除错误呢 

--  作者:有点蓝
--  发布时间:2018/1/12 20:37:00
--  

If e.Cols.Contains("审核") Then
    If e.Row("审核") = True AndAlso User.Name <> "皮新华" Then
        e.Cancel = True
        MessageBox.Show("审核权限不够!")
    ElseIf e.Row("审核") = True Then \'如果此行已经审批了,则禁止修改
        e.Cancel = True
        MessageBox.Show("审核不能更改!")
    End If
End If

--  作者:yifan3429
--  发布时间:2018/1/13 9:27:00
--  

PrepareEdit下会报错


应该放在全局表的那个位置


--  作者:有点蓝
--  发布时间:2018/1/13 9:39:00
--  
1.去掉MessageBox.Show("审核权限不够!")

2、放到StartEdit事件

StartEdit事件的使用方法和PrepareEdit事件完全一样,实际上大部分PrepareEdit能完成的工作,都可以用StartEdit完成。
但是两者有细微差别;PrepareEdit事件的代码,一进入单元格就会执行,为可能开始的编辑工作做准备,所以执行效率会差一些,因为并不是每次进入单元格都是需要编辑的;而StartEdit只是在真正开始编辑的时候执行,效率会稍微好一点;不过这种效率的差别,我们并不会明显感觉得到。
此外用于设置列表项目的代码,最好不要用在StartEdit事件中,否则你选择某一单元格的时候,可能不会出现下拉箭头按钮,因为此时StartEdit事件并没有执行,列表项目当然也就没有准备好。
千万不要在PrepareEdit事件显示Messagebox这样的对话框,因为每次进入单元格就会出现提示,这样会导致死循环的出现;在StartEdit事件中显示对话框就 没有这个问题,因为此时只有用户真正做出编辑动作的时候,对话框才会显示。