以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  列验证和load重新加载行冲突  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=133507)

--  作者:vimin
--  发布时间:2019/4/15 14:06:00
--  列验证和load重新加载行冲突
我利用openqq进行数据同步,在用户A修改行H之后,其他好友用户重新加载行H。代码就不贴了。
问题是,我为了验证列“用户单位”,不能空和不能重名,在Datacolchanging事件中写入了以下代码:
If e.DataCol.Name = "单位名称" Then
    If e.NewValue Is Nothing Then
        MessageBox.show("单位名称不能空着","提示",MessageBoxButtons.OK,MessageBoxIcon.Error)
        e.Cancel = True
    Else
        Dim h As DataRow
        h = e.DataTable.sqlfind("单位名称 = \'" & e.NewValue & "\'")
        If h IsNot Nothing Then
            MessageBox.show("单位名称已经存在")
            e.Cancel = True
        End If
    End If
End If

运行时提醒“名称已存在”。我想是该代码标黄的部分会导致load该行时造成的。
但我是分页的设计,所以用SQLFIND。请问这能解决吗?

--  作者:有点甜
--  发布时间:2019/4/15 15:09:00
--  

 

加载数据不会导致触发datacolchanged事件,请做出错实例发上来测试。

 

 


--  作者:vimin
--  发布时间:2019/4/16 21:30:00
--  

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:测试.zip

我尽量把不相关的都删了,请帮我看一下啊。

请用两个测试账户分别登录,密码都是888.

在表的某一行修改然后保存,就会在另一个账号弹出“名称已经存在”的提醒


--  作者:有点蓝
--  发布时间:2019/4/16 21:51:00
--  
表格的Load不会触发事件,但是行的Load是会触发事件,这个也是合理的,不然基于行的某些计算就会有问题,比如流水账这种

如果不需要触发,加上systemready 即可,如:

systemready = False
DataTables("表A").DataRows(0).Load
systemready = True
[此贴子已经被作者于2019/4/16 21:51:47编辑过]

--  作者:vimin
--  发布时间:2019/4/17 11:11:00
--  
明白了,非常感谢!