Foxtable(狐表)用户栏目专家坐堂 → 麻烦老师看下这个逻辑怎么


  共有3239人关注过本帖树形打印复制链接

主题:麻烦老师看下这个逻辑怎么

帅哥哟,离线,有人找我吗?
初心不改再说未来
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:496 积分:3905 威望:0 精华:0 注册:2017/7/19 10:58:00
麻烦老师看下这个逻辑怎么  发帖心情 Post By: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  会覆盖掉之前的员工数据,把销售人变成了后来刷新此行数据的员工,这个逻辑是哪里出问题了啊

 回到顶部
帅哥哟,离线,有人找我吗?
初心不改再说未来
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:496 积分:3905 威望:0 精华:0 注册:2017/7/19 10:58:00
  发帖心情 Post By: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


这样加个判断行不行?如果加载后操作列已经有值了就撤销编辑,如果是空值就判断是不是已销售

 回到顶部
帅哥哟,离线,有人找我吗?
初心不改再说未来
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:496 积分:3905 威望:0 精华:0 注册:2017/7/19 10:58:00
  发帖心情 Post By:2019/10/24 11:12:00 [显示全部帖子]

独占式编辑已经做好了,现在当前用户在编辑时其他用户是不能编辑的
问题是:当前用户编辑成功后,我设置的代码会自动锁定当前行。如果其他用户刷新了表,就没问题,但是当没刷新表时,其他用户的界面里表还是未锁定状态,仍然可以编辑。

 回到顶部
帅哥哟,离线,有人找我吗?
初心不改再说未来
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:496 积分:3905 威望:0 精华:0 注册:2017/7/19 10:58:00
  发帖心情 Post By:2019/10/24 11:15:00 [显示全部帖子]

1212
[此贴子已经被作者于2019/10/24 11:26:57编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
初心不改再说未来
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:496 积分:3905 威望:0 精华:0 注册:2017/7/19 10:58:00
  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
初心不改再说未来
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:496 积分:3905 威望:0 精华:0 注册:2017/7/19 10:58:00
  发帖心情 Post By:2019/10/24 11:54:00 [显示全部帖子]

多人编辑背景下,某列的值可能已经被其他人编辑,但我本地的数据并未刷新,显示的可能是仍然可编辑的状态,
所以在PrepareEdit事件里写了:Tables("add").Current.Load() 编辑之前先加载最新数据。

所以这里的if是判断此行数据在我之前是不是有人已经编辑过了,如果编辑过了就不要更改别人的数据:
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



 回到顶部