以文本方式查看主题 - 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 ) 可以把蓝色部分代码放到函数中,其它地方统一调用 |