以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 麻烦老师看下这个逻辑怎么 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=142326) |
|
-- 作者:初心不改再说未来 -- 发布时间:2019/10/24 10:00:00 -- 麻烦老师看下这个逻辑怎么 表里有个DataColChanged事件,其中有代码: If e.DataCol.Name = "操作" Then \'如果是已结帐列的内容变动 \' If e.NewValue = True Then \'而且变动后的值是True(已勾选) If e.NewValue = "已销售" Then e.DataRow("销售人") = User.Name e.DataRow.Locked = True \'那么锁定此行 End If DataTables("ask_add").Save() End If 这样就可以自动添加当前用户为销售人了。 但是,当另外一个用户也想变更此列的时候,我设置了PrepareEdit事件的: Tables("ask_add").Current.Load() 意图是当其他用户想编辑此行时,先加载最新的数据。 问题是: 现在加载进来的时候, e.DataRow("销售人") = User.Name 会覆盖掉之前的员工数据,把销售人变成了后来刷新此行数据的员工,这个逻辑是哪里出问题了啊 |
|
-- 作者:初心不改再说未来 -- 发布时间:2019/10/24 10:09:00 -- If e.DataCol.Name = "操作" Then If e.NewValue Is Nothing Then If e.NewValue = "已销售" Then e.DataRow("销售人") = User.Name e.DataRow.Locked = True \'那么锁定此行 End If DataTables("ask_add").Save() End If Else e.Cancel = True End If End If 这样加个判断行不行?如果加载后操作列已经有值了就撤销编辑,如果是空值就判断是不是已销售
|
|
-- 作者:有点蓝 -- 发布时间:2019/10/24 10:17:00 -- 参考:http://www.foxtable.com/webhelp/topics/3007.htm |
|
-- 作者:初心不改再说未来 -- 发布时间:2019/10/24 11:12:00 -- 独占式编辑已经做好了,现在当前用户在编辑时其他用户是不能编辑的 问题是:当前用户编辑成功后,我设置的代码会自动锁定当前行。如果其他用户刷新了表,就没问题,但是当没刷新表时,其他用户的界面里表还是未锁定状态,仍然可以编辑。
|
|
-- 作者:有点蓝 -- 发布时间:2019/10/24 11:14:00 -- 那就再加上即时同步:http://www.foxtable.com/webhelp/topics/3006.htm |
|
-- 作者:初心不改再说未来 -- 发布时间:2019/10/24 11:15:00 -- 1212
[此贴子已经被作者于2019/10/24 11:26:57编辑过]
|
|
-- 作者:有点蓝 -- 发布时间:2019/10/24 11:23:00 -- 或者datacolchanging事件 Dim dr As DataRow = e.DataTable.sqlfind("[_Identify]= " & e.DataRow("_Identify") & " and [_Locked] = true") msgbox(dr Is Nothing) If dr IsNot Nothing Then e.Cancel = True e.DataRow.Load End If |
|
-- 作者:初心不改再说未来 -- 发布时间:2019/10/24 11:29:00 -- If e.DataCol.Name = "操作" Then \'如果内容发生变动的是产品列 If e.NewValue IsNot Nothing Then \'如果新值不是空白,也就是产品列的内容不为空 e.Cancel = True ElseIf e.DataCol.Name = "操作" AndAlso e.DataRow("操作") = "单" Dim nma() As String = {"姓名","日期","编号","人"} \'A表数据来源列 Dim nmb() As String = {"姓名","日期","编号","姓名"} \'B表数据接收列 Dim dr As DataRow = DataTables("kefu").AddNew e.DataRow("抢单人") = User.Name For i As Integer = 0 To nma.Length - 1 dr(nmb(i)) = e.DataRow(nma(i)) Next e.DataRow.Locked = True \'那么锁定此行 End If End If 老师这个elseif为啥不执行呢?
[此贴子已经被作者于2019/10/24 11:32:03编辑过]
|
|
-- 作者:有点蓝 -- 发布时间:2019/10/24 11:32:00 -- 没看懂这代码需要实现什么判断逻辑,用文字描述一下 |
|
-- 作者:初心不改再说未来 -- 发布时间:2019/10/24 11:54:00 -- 多人编辑背景下,某列的值可能已经被其他人编辑,但我本地的数据并未刷新,显示的可能是仍然可编辑的状态, 所以在PrepareEdit事件里写了:Tables("add").Current.Load() 编辑之前先加载最新数据。 所以这里的if是判断此行数据在我之前是不是有人已经编辑过了,如果编辑过了就不要更改别人的数据:
|