Foxtable(狐表)用户栏目专家坐堂 → 【已解决】DataColChanged表事件导致系统自动退出的问题


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

主题:【已解决】DataColChanged表事件导致系统自动退出的问题

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


加好友 发短信
等级:二尾狐 帖子:531 积分:4155 威望:0 精华:0 注册:2012/11/26 21:54:00
【已解决】DataColChanged表事件导致系统自动退出的问题  发帖心情 Post By:2013/5/2 20:59:00 [只看该作者]

狐爸,

今天发现一个严重的问题,不知道是不是Bug,特做了一个新实例发上来,问题如下:

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目8.foxdb


请打开项目,当发货明细数量大于订单的数量时候,会运行下面处代码,然后系统就自动关闭掉了,急需请狐爸帮忙,谢谢。

这是发货明细的DataColChanged事件代码

Dim num1,num2 As Double
Select Case e.DataCol.Name
    Case "发货数量"
        If e.NewValue <= 0 Then
            e.DataRow("发货数量") = e.OldValue
            Return
        End If
        Dim dr As DataRow = DataTables("订单明细").Find("ID = '" & e.DataRow("ID") &"'")
        If dr IsNot Nothing Then
            num1 = dr("已发货") - e.OldValue +e.NewValue
            num2 = dr("未发货") + e.OldValue
            
            If num1 > dr("订单数量") Then ' 运行此处代码时系统立即自动关闭
                e.DataRow("发货数量") = num2
                MessageBox.Show("发货数量不得大于订单数量")
                Return
            End If
            
            If num1 < 0 Then ' 运行此处代码时系统立即自动关闭
                e.DataRow("发货数量") = num2
                MessageBox.Show("总发货数量不得小于0")
                Return
            End If
            
            dr("已发货") = num1
        End If
End Select
[此贴子已经被作者于2013-5-3 9:55:12编辑过]

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


加好友 发短信
等级:二尾狐 帖子:531 积分:4155 威望:0 精华:0 注册:2012/11/26 21:54:00
  发帖心情 Post By:2013/5/2 22:57:00 [只看该作者]

沙发,顶一下

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


加好友 发短信
等级:二尾狐 帖子:531 积分:4155 威望:0 精华:0 注册:2012/11/26 21:54:00
  发帖心情 Post By:2013/5/3 8:46:00 [只看该作者]

再顶一下,除掉上面的①跟②处,其他时候也经常会导致系统自动退出。

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


加好友 发短信
等级:等待验证 帖子:3855 积分:20692 威望:0 精华:5 注册:2012/6/21 14:03:00
  发帖心情 Post By:2013/5/3 8:49:00 [只看该作者]

用户已被锁定

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/5/3 8:52:00 [只看该作者]

我建议你这种验证代码设置在DataColchanging事件中,发现不符合要求,直接e.cancel,取消本次输入即可,不要去设置该列的值,否则你很容易造成死循环,导致系统崩溃退出。

Datacolchanging用于验证,DataColchanged用于在输入完成后计算或其他动作。


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


加好友 发短信
等级:二尾狐 帖子:531 积分:4155 威望:0 精华:0 注册:2012/11/26 21:54:00
  发帖心情 Post By:2013/5/3 8:54:00 [只看该作者]

以下是引用muhua在2013-5-3 8:49:00的发言:

我测试木有问题,你下载狐表最新版本 4.30 版吧。

muhua老师,我的是4月30日的最新版本,我这每次试都会自动退出,可否方便远程帮忙看看?


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


加好友 发短信
等级:二尾狐 帖子:531 积分:4155 威望:0 精华:0 注册:2012/11/26 21:54:00
  发帖心情 Post By:2013/5/3 9:55:00 [只看该作者]

以下是引用狐狸爸爸在2013-5-3 8:52:00的发言:

我建议你这种验证代码设置在DataColchanging事件中,发现不符合要求,直接e.cancel,取消本次输入即可,不要去设置该列的值,否则你很容易造成死循环,导致系统崩溃退出。

Datacolchanging用于验证,DataColchanged用于在输入完成后计算或其他动作。

谢谢狐爸,是我对狐表的理解还不够,现在可以了。


 回到顶部