以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  独占式编辑问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=118531)

--  作者:swagger
--  发布时间:2018/5/5 2:01:00
--  独占式编辑问题
用户A弹出一个订单窗口界面,新建一行addnew:

假设订单编号 005, 然后textbox1 绑定的客户名称是空的。用户A做其它事情,一直没有输入客户名称等订单资料


接着用户B弹出同样的订单窗口界面,  loadfilter打开是订单编号005,然后用户B输入客户名称等订单资料。

等用户B输入完订单资料,用户A才开始在刚才打开订单窗口的订单编号005的订单输入资料。

这样的结果导致订单和订单明细混乱,两者交叉在一起了。

问题1. 是否要用独占式编辑解决?
问题2. 窗口怎么用独占式编辑限制不能同时编辑同一行


--  作者:有点蓝
--  发布时间:2018/5/5 8:22:00
--  
问题1:
1、新建一行addnew后先不要保存,等全部编辑完毕再保存,编号统一管理,参考:http://www.foxtable.com/webhelp/scr/3008.htm
2、使用独占式编辑解决

问题2:参考:http://www.foxtable.com/webhelp/scr/2342.htm,结合独占式编辑代码大概这样:

文本框的Enter事件代码设置为:

Dim canedit As Boolean

Dim r As Row = Tables("表A").Current

If r.DataRow.RowState = DataRowState.Added Then \'新增行正常编辑

    Return

End If

If QQClient.Ready = False Then \'如果QQClient没有启动,则禁止编辑

    PopMessage("必须启动QQClient,才能编辑此表数据!","提示",PopIconEnum.Infomation,5)

Else

    Dim key As String = "表A:" & r("_Identify")

    If tbrk.Contains(key) Then \'如果 本人之前已经编辑此行,则正常编辑

        canedit = True

    Else \'如果 本人之前没有编辑此行

        Dim msg = QQClient.SendWait("?#" & Key & "#?",5) \'向服务器发送请求编辑信息

        If msg = "OK" Then \'如果服务器返回OK

            tbrk.Add(key) \'在本地登记正在编辑此行

            canedit = True

        ElseIf msg > "" Then \'否则显示服务器返回的信息,并取消编辑

            PopMessage("无法编辑此行,因为:" & vbcrlf & msg ,"提示",PopIconEnum.Infomation,5)

        Else \'如果服务器没有返回信息,则取消编辑

            PopMessage("因服务器无响应,无法编辑此行!" ,"提示",PopIconEnum.Infomation,5)

        End If

    End If

End If

Dim ctl As WinForm.Control = e.Sender

ctl.ReadOnly = IIF(canedit ,BooleanEnum.False,BooleanEnum.True )


可以把蓝色部分代码放到函数中,其它地方统一调用