Foxtable(狐表)用户栏目专家坐堂 → [求助]帮助文件中的实例“独占式编辑之一”,有一个不完善的地方:


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

主题:[求助]帮助文件中的实例“独占式编辑之一”,有一个不完善的地方:

帅哥哟,离线,有人找我吗?
fengwenliuyan
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:902 积分:8258 威望:0 精华:0 注册:2012/10/19 13:55:00
[求助]帮助文件中的实例“独占式编辑之一”,有一个不完善的地方:  发帖心情 Post By:2020/2/23 10:55:00 [只看该作者]

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



 回到顶部
帅哥哟,离线,有人找我吗?
fengwenliuyan
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:902 积分:8258 威望:0 精华:0 注册:2012/10/19 13:55:00
回复:(fengwenliuyan)[求助]帮助文件中的实例“独占...  发帖心情 Post By:2020/2/23 15:02:00 [只看该作者]

?求帮助?
怎么一直没有人帮助呢?


 回到顶部
帅哥哟,离线,有人找我吗?
fengwenliuyan
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:902 积分:8258 威望:0 精华:0 注册:2012/10/19 13:55:00
回复:(fengwenliuyan)回复:(fengwenliuyan)[求助...  发帖心情 Post By:2020/2/23 20:38:00 [只看该作者]

求帮助

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110738 积分:563610 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/2/23 20:54:00 [只看该作者]

用户B如果没有刷新数据,怎么看得到其它用户新增的数据?又如何编辑呢?所以不可能出现冲突啊

 回到顶部
帅哥哟,离线,有人找我吗?
fengwenliuyan
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:902 积分:8258 威望:0 精华:0 注册:2012/10/19 13:55:00
回复:(有点蓝)用户B如果没有刷新数据,怎么看得到其...  发帖心情 Post By:2020/2/23 21:53:00 [只看该作者]

实际情况是:
用户A先登录加载了数据,并新增5行空行,并保存了,那么此时的5行空行,都是出于可编辑状态,且已上传至数据库;
然后,用户B登录加载数据,此时的5行空行将会一并显示在用户B的电脑上;
之后,用户A编辑其中一行数据,并保存;
但是,此时的用户B,并没有及时刷新数据,并且也在同一行上编辑数据,然后保存,那么,此前用户A所做的编辑,将被无视,并被用户B的编辑所覆盖。

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

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

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

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110738 积分:563610 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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

 回到顶部