以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  审批后录入窗口依然能编辑的问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=113687)

--  作者:joechenjw
--  发布时间:2018/1/21 4:03:00
--  审批后录入窗口依然能编辑的问题
审批后表不能编辑了,但是录入窗口仍然可以编辑,并且编辑内容可以注入表。怎么才能在录入窗口也禁止编辑呢?
--  作者:有点甜
--  发布时间:2018/1/21 22:36:00
--  

参考

 

http://www.foxtable.com/webhelp/scr/2342.htm

 


--  作者:joechenjw
--  发布时间:2018/1/21 23:51:00
--  
在表中可以实现“如果审批人列不为空则禁止编辑”,但是不能阻止通过录入窗口修改数据,所以需要在窗口中实现“如果审批人列不为空则禁止编辑”。文档我看过了,只是针对不同用户修改不同列,依然不能解决这个问题。我也参考表的代码在窗口全局事件中写了代码,但是依然无法禁止编辑。希望可以提供代码参考,谢谢!
--  作者:有点甜
--  发布时间:2018/1/21 23:59:00
--  

1、你可以直接把某一行锁定;

 

2、文档的条件你可以修改成自己的逻辑啊。不会做上传实例。


--  作者:joechenjw
--  发布时间:2018/1/24 19:15:00
--  
表事件PrepareEdit的代码设置为:

If e.Row.IsNull("审核人") = False Then \'如果审批人列不为空
    e.Cancel = True \'则禁止编辑
End If

这样经过审批的行,将不能编辑。
前面所有有关编辑的权限设置,都是针对数据表的。如果采用录入窗口编辑数据,那么这些权限设置是无效的,我们需要另外的方法。

在窗口的全局事件的Enter事件中设置代码:

Dim ctl As WinForm.Control = e.Sender
Dim tex1 As WinForm.TextBox
tex1 = e.Form.Controls("TextBox33")
Select Case ctl.BindingField 
    Case "立项.服务分包成本"
        If tex1.Text = Nothing Then \'如果审批人列为空
            ctl.ReadOnly = BooleanEnum.False \'允许编辑
        Else
            ctl.ReadOnly = BooleanEnum.True \'禁止编辑
        End If
End Select

这样只能限制录入窗口某个文本框禁止编辑,但是我的窗口文本框很多我不能逐个去设,希望可以直接整个窗口都禁止编辑,能否做到?

--  作者:有点甜
--  发布时间:2018/1/24 19:27:00
--  

改成这样

 

Dim r As Row = Tables("表A").Current
If r("审核人") = Nothing Then
    ctl.ReadOnly = BooleanEnum.False \'允许编辑
Else
    ctl.ReadOnly = BooleanEnum.True \'禁止编辑
End If


--  作者:joechenjw
--  发布时间:2018/2/1 13:15:00
--  
按照您的代码问题解决,非常感谢!