以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  【已解决】DataColChanged表事件导致系统自动退出的问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=32470)

--  作者:atmetmicoo
--  发布时间:2013/5/2 20:59:00
--  【已解决】DataColChanged表事件导致系统自动退出的问题
狐爸,

今天发现一个严重的问题,不知道是不是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
--  发布时间:2013/5/2 22:57:00
--  
沙发,顶一下
--  作者:atmetmicoo
--  发布时间:2013/5/3 8:46:00
--  
再顶一下,除掉上面的①跟②处,其他时候也经常会导致系统自动退出。
--  作者:狐狸爸爸
--  发布时间:2013/5/3 8:52:00
--  

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

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


--  作者:atmetmicoo
--  发布时间:2013/5/3 8:54:00
--  
以下是引用muhua在2013-5-3 8:49:00的发言:

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

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


--  作者:atmetmicoo
--  发布时间:2013/5/3 9:55:00
--  
以下是引用狐狸爸爸在2013-5-3 8:52:00的发言:

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

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

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