以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]帮助文件中的实例“独占式编辑之一”,有一个不完善的地方:  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=146405)

--  作者:fengwenliuyan
--  发布时间:2020/2/23 10:55:00
--  [求助]帮助文件中的实例“独占式编辑之一”,有一个不完善的地方:
帮助文件中的实例“独占式编辑之一”,有一个不完善的地方:
若用户A,在已新增的空行第一行中的第一列编辑"111",保存,
然后用户B,未刷新数据,直接在这一行的第一列编辑"222",那么这一行的用户A刚编辑的数据,将被无视并覆盖掉了,
请问,有什么办法解决吗?
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:独占式编辑之一.foxdb



--  作者:fengwenliuyan
--  发布时间:2020/2/23 15:02:00
--  回复:(fengwenliuyan)[求助]帮助文件中的实例“独占...
?求帮助?
怎么一直没有人帮助呢?


--  作者:fengwenliuyan
--  发布时间:2020/2/23 20:38:00
--  回复:(fengwenliuyan)回复:(fengwenliuyan)[求助...
求帮助
--  作者:有点蓝
--  发布时间:2020/2/23 20:54:00
--  
用户B如果没有刷新数据,怎么看得到其它用户新增的数据?又如何编辑呢?所以不可能出现冲突啊
--  作者:fengwenliuyan
--  发布时间:2020/2/23 21:53:00
--  回复:(有点蓝)用户B如果没有刷新数据,怎么看得到其...
实际情况是:
用户A先登录加载了数据,并新增5行空行,并保存了,那么此时的5行空行,都是出于可编辑状态,且已上传至数据库;
然后,用户B登录加载数据,此时的5行空行将会一并显示在用户B的电脑上;
之后,用户A编辑其中一行数据,并保存;
但是,此时的用户B,并没有及时刷新数据,并且也在同一行上编辑数据,然后保存,那么,此前用户A所做的编辑,将被无视,并被用户B的编辑所覆盖。

应对思路:
在表的BeforSaveDatarow表事件中,加一个保存前的验证条件:
新增一列逻辑列“可保存”,只有“可保存”这一逻辑列为true时,选中行才允许被保存。

遇到的问题:
If e.DataRow("可保存") = False Then
    e.Cancel = True
End If
代码写好了,但是结果不成功?

请问,应该怎么解决这个问题?

--  作者:有点蓝
--  发布时间:2020/2/23 23:02:00
--  
“可保存”什么情况下为true?结果不成功指什么,"可保存"为false还是可以保存?

建议在选择不同行数据的时候重新加载一下这行数据
BeforeSelChange事件
If e.OldRange.RowSel <> e.NewRange.RowSel \'如果选择的是不同的行
    If e.OldRange.RowSel >= 0 AndAlso e.OldRange.Rowsel < e.Table.Rows.Count Then \'而且原来选择的是一个有效的数据行
        Dim r As Row = e.Table.Rows(e.NewRange.Rowsel) \'获得新选择的行
        If r.DataRow.RowState = DataRowState.Unchanged Then \'如果这行还没有改
            r.DataRow.Load ‘重新加载这行
        End If 
    End If
End If

或者在StartEdit事件,开始编辑前加载器其它单元格的数据
If e.Row.DataRow.RowState = DataRowState.Unchanged Then
    e.Row.DataRow.Load
End If