Foxtable(狐表)用户栏目专家坐堂 → [求助]在新增行修改数据未能触发atacolchanged事件


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

主题:[求助]在新增行修改数据未能触发atacolchanged事件

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


加好友 发短信
等级:幼狐 帖子:55 积分:439 威望:0 精华:0 注册:2017/6/5 21:39:00
[求助]在新增行修改数据未能触发atacolchanged事件  发帖心情 Post By:2018/3/12 23:53:00 [只看该作者]

老师,您好!
我的项目中有个生产单表,在已有的行内输入型号或修改型号,能够触发datacolchanged事件,产品部件的宽度会自动计算。
但在新增加的行中输入型号或修改型号,则不能触发触发datacolchanged事件,产品部件的宽度没有计算,即便是输入相同的型号。

项目关闭,再重启后,在上次新增的行输入型号或修改型号等,依然未能触发。

不知哪里出错了。
[此贴子已经被作者于2018/3/12 23:59:19编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/13 9:36:00 [只看该作者]

1、贴出你datacolchanged事件代码;

 

2、调试是否触发,你可以在事件里面加入msgbox(e.datacol.name)等msgbox进行测试的。

 

3、一般不计算,应该是你数据没写对或者代码没写对,导致查找不到数据计算


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


加好友 发短信
等级:幼狐 帖子:55 积分:439 威望:0 精华:0 注册:2017/6/5 21:39:00
  发帖心情 Post By:2018/3/13 12:10:00 [只看该作者]

老师,你好!
代码有点长,如下:
Select Case e.DataCol.name
    Case "平方价","长度","宽度","深度","高度","门头高","数量","木架","箱数","底座类别","锁数","钩数","额外加价","框色","拉手","玻厚","玻色","玻艺","置物架"
        If e.DataRow("型号").Length >= 5 Then
            Dim pr As DataRow = e.DataRow.GetParentRow("订单") '找出对应的父行
            Dim pz As DataRow = e.DataRow.GetParentRow("淋浴房产品表")
            Dim ac = e.DataRow("型号").SubString(1,1)
            Dim ad = e.DataRow("型号").SubString(2,2)
            Dim ae = e.DataRow("型号").SubString(0,4)
            Dim af = e.DataRow("型号").SubString(4)
            If pr IsNot Nothing And pz IsNot Nothing Then
                DataTables("订单").DataCols("总额").RaiseDataColChanged(pr)  '通知系统此父行的数量列发生了改变,触发DataColChanged事件
                e.DataRow("活a宽") = iif(pz("活a宽常数") >= 250,pz("活a宽常数"),e.DataRow("长度") * pz("活a宽常量") + pz("活a宽常数"))
                If ac = "P" Then
                    If ad = "11" Then
                        e.DataRow("固b宽") = e.DataRow("长度") - e.DataRow("活a宽") + pz("固b宽常数")
                    ElseIf ae = "AP21" Then
                        e.DataRow("固b宽") = e.DataRow("活a宽") + pz("固b宽常数")
                        e.DataRow("固c宽") = e.DataRow("长度") - e.DataRow("活a宽") - e.DataRow("固b宽") + pz("固c宽常数")
                    ElseIf ae = "AP22" Then
                        e.DataRow("固b宽") = e.DataRow("长度") * pz("固b宽常量") + pz("固b宽常数")
                        e.DataRow("活a2宽") = e.DataRow("长度") * pz("活a2宽常量") + pz("活a宽常数")
                        e.DataRow("固b2宽") = e.DataRow("长度")* pz("固b2宽常量") + pz("固b2宽常数")
                    ElseIf ae = "UP21" Then
                        e.DataRow("固b宽") = (e.DataRow("长度") - e.DataRow("活a宽")) / 2 + pz("固b宽常数")
                        e.DataRow("固c宽") = e.DataRow("长度") - e.DataRow("活a宽") - e.DataRow("固b宽") + pz("固c宽常数")
                    End If
                    
                ElseIf ac = "J" Then
                    e.DataRow("固b宽") = iif(pz("固b宽常数") >= 250,pz("固b宽常数"),e.DataRow("长度") * pz("固b宽常量") + pz("固b宽常数"))
                    e.DataRow("固c宽") = e.DataRow("长度") * pz("固c宽常量") + pz("固c宽常数")
                    
                ElseIf ac = "S" Then
                    e.DataRow("固b宽") = e.DataRow("长度") * pz("固b宽常量") + pz("固b宽常数")
                    e.DataRow("活a2宽") = iif(pz("活a2宽常数") >= 250,pz("活a2宽常数"),e.DataRow("宽度") * pz("活a2宽常量") + pz("活a2宽常数"))
                    e.DataRow("固b2宽") = e.DataRow("宽度") * pz("固b2宽常量") + pz("固b2宽常数")
                    e.DataRow("固c宽") = e.DataRow("宽度") * pz("固c宽常量") + pz("固c宽常数")
                    
                ElseIf ac = "L" Then
                    If af = "Q" Or af = "G4" Then
                        e.DataRow("固b宽") = e.DataRow("长度") * pz("固b宽常量") + pz("固b宽常数")
                        e.DataRow("活a2宽") = e.DataRow("宽度") * pz("活a2宽常量") + pz("活a2宽常数")
                        e.DataRow("固b2宽") = e.DataRow("宽度") * pz("固b2宽常量") + pz("固b2宽常数")
                        e.DataRow("固c宽") = e.DataRow("宽度") * pz("固c宽常量") + pz("固c宽常数")
                    Else
                        e.DataRow("固b宽") = e.DataRow("长度") - e.DataRow("活a宽") + pz("固b宽常数")
                        e.DataRow("活a2宽") = e.DataRow("宽度") * pz("活a2宽常量") + pz("活a2宽常数")
                        e.DataRow("固b2宽") = e.DataRow("宽度") - e.DataRow("活a2宽") + pz("固b2宽常数")
                        e.DataRow("固c宽") = e.DataRow("宽度") * pz("固c宽常量") + pz("固c宽常数")
                    End If
                    
                ElseIf ac = "R" Then
                    e.DataRow("固b宽") = iif(pz("固b宽常数") >= 250,pz("固b宽常数"),e.DataRow("长度") * pz("固b宽常量") + pz("固b宽常数"))
                    e.DataRow("活a2宽") = iif(pz("活a2宽常数") >= 250,pz("活a2宽常数"),e.DataRow("宽度") * pz("活a2宽常量") + pz("活a2宽常数"))
                    e.DataRow("固b2宽") = iif(pz("固b2宽常数") >= 250,pz("固b2宽常数"),e.DataRow("宽度") * pz("固b2宽常量") + pz("固b2宽常数"))
                    e.DataRow("固c宽") = iif(pz("固c宽常数") >= 250,pz("固c宽常数"),e.DataRow("宽度") * pz("固c宽常量") + pz("固c宽常数"))
                    
                ElseIf ac = "D" Then
                    e.DataRow("固b宽") = e.DataRow("宽度") + pz("固b宽常数")
                    e.DataRow("固c宽") = e.DataRow("深度") + pz("固c宽常数")
                    e.DataRow("活a2宽") = e.DataRow("长度") * pz("活a2宽常量") + pz("活a2宽常数")
                    e.DataRow("固b2宽") = e.DataRow("深度") * pz("固b2宽常量") + pz("固b2宽常数")
                    
                ElseIf ac = "E" Then
                    If ad = "32" Then
                        e.DataRow("活a2宽") = iif(pz("活a2宽常数") >= 250,pz("活a2宽常数"),e.DataRow("长度") + pz("活a2宽常数"))
                        e.DataRow("固b宽") = e.DataRow("宽度") + pz("固b宽常数")
                        e.DataRow("固b2宽") = e.DataRow("宽度") + pz("固b2宽常数")
                        e.DataRow("固t宽") = e.DataRow("深度") + pz("固t宽常数")
                    ElseIf ad = "42" Or ad = "52" Then
                        e.DataRow("活a2宽") = iif(pz("活a2宽常数") >= 250,pz("活a2宽常数"),e.DataRow("长度") * pz("活a2宽常量") + pz("活a2宽常数"))
                        e.DataRow("固b宽") = e.DataRow("长度") * pz("固b宽常量") - e.DataRow("活a宽") + pz("固b宽常数")
                        e.DataRow("固b2宽") = e.DataRow("长度") - e.DataRow("活a宽") - e.DataRow("活a2宽") - e.DataRow("固b宽")  + pz("固b2宽常数")
                        e.DataRow("固c宽") = e.DataRow("宽度") + pz("固c宽常数")
                        e.DataRow("固c2宽") = e.DataRow("宽度") + pz("固c2宽常数")
                        e.DataRow("固t宽") = e.DataRow("深度") + pz("固t宽常数")
                    ElseIf ad = "62" Then
                        e.DataRow("活a2宽") = iif(pz("活a2宽常数") >= 250,pz("活a2宽常数"),e.DataRow("长度") * pz("活a2宽常量") + pz("活a2宽常数"))
                        e.DataRow("固b宽") = e.DataRow("长度") * pz("固b宽常量") - e.DataRow("活a宽") + pz("固b宽常数")
                        e.DataRow("固b2宽") = e.DataRow("长度") - e.DataRow("活a宽") - e.DataRow("活a2宽") - e.DataRow("固b宽") - e.DataRow("固c宽") + pz("固b2宽常数")
                        e.DataRow("固c宽") = e.DataRow("长度") * pz("固c宽常量") + pz("固c宽常数")
                        e.DataRow("固c2宽") = e.DataRow("宽度") + pz("固c2宽常数")
                        e.DataRow("固c3宽") = e.DataRow("宽度") + pz("固c3宽常数")
                        e.DataRow("固t宽") = e.DataRow("深度") + pz("固t宽常数")
                    End If
            End If
        End If
End Select

请查附件截屏图,例如UE52V9的型号,在原有的数据行内,玻璃的宽度有显示。而在后面新加的行内,玻璃的宽度就没显示。

图片点击可在新窗口打开查看此主题相关图片如下:qq图片20180313120624.png
图片点击可在新窗口打开查看



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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/13 12:22:00 [只看该作者]

1、加入msgbox,看执行到哪里开始出问题;

 

2、不要死循环 http://www.foxtable.com/webhelp/scr/1522.htm

 

3、出错的实例发上来测试。


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


加好友 发短信
等级:幼狐 帖子:55 积分:439 威望:0 精华:0 注册:2017/6/5 21:39:00
  发帖心情 Post By:2018/3/13 13:58:00 [只看该作者]

谢老师提醒,我按您的指点更改了代码,也测试了,没有发现问题。但就是生产单表中下面两行的玻璃宽度没有计算。
麻烦您看看随函发给您的文件。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:客户订单系统 新总价_201803131353.zip


Dim dr As DataRow = e.DataRow
Select Case e.DataCol.name
    Case "平方价","长度","宽度","深度","高度","门头高","数量","木架","箱数","底座类别","锁数","钩数","额外加价","框色","拉手","玻厚","玻色","玻艺","置物架"
        If dr("型号").Length >= 5 Then
            Dim pr As DataRow = dr.GetParentRow("订单") '找出对应的父行
            Dim pz As DataRow = dr.GetParentRow("淋浴房产品表")
            Dim ac = dr("型号").SubString(1,1)
            Dim ad = dr("型号").SubString(2,2)
            Dim ae = dr("型号").SubString(0,4)
            Dim af = dr("型号").SubString(4)
            If pr IsNot Nothing And pz IsNot Nothing Then
                DataTables("订单").DataCols("总额").RaiseDataColChanged(pr)  '通知系统此父行的数量列发生了改变,触发DataColChanged事件
                dr("活a宽") = iif(pz("活a宽常数") >= 250,pz("活a宽常数"),dr("长度") * pz("活a宽常量") + pz("活a宽常数"))
                If ac = "P" Then
                    If ad = "11" Then
                        dr("固b宽") = dr("长度") - dr("活a宽") + pz("固b宽常数")
                    ElseIf ae = "AP21" Then
                        dr("固b宽") = dr("活a宽") + pz("固b宽常数")
                        dr("固c宽") = dr("长度") - dr("活a宽") - dr("固b宽") + pz("固c宽常数")
                    ElseIf ae = "AP22" Then
                        dr("固b宽") = dr("长度") * pz("固b宽常量") + pz("固b宽常数")
                        dr("活a2宽") = dr("长度") * pz("活a2宽常量") + pz("活a宽常数")
                        dr("固b2宽") = dr("长度")* pz("固b2宽常量") + pz("固b2宽常数")
                    ElseIf ae = "UP21" Then
                        dr("固b宽") = (dr("长度") - dr("活a宽")) / 2 + pz("固b宽常数")
                        dr("固c宽") = dr("长度") - dr("活a宽") - dr("固b宽") + pz("固c宽常数")
                    End If
                    
                ElseIf ac = "J" Then
                    dr("固b宽") = iif(pz("固b宽常数") >= 250,pz("固b宽常数"),dr("长度") * pz("固b宽常量") + pz("固b宽常数"))
                    dr("固c宽") = dr("长度") * pz("固c宽常量") + pz("固c宽常数")
                    
                ElseIf ac = "S" Then
                    dr("固b宽") = dr("长度") * pz("固b宽常量") + pz("固b宽常数")
                    dr("活a2宽") = iif(pz("活a2宽常数") >= 250,pz("活a2宽常数"),dr("宽度") * pz("活a2宽常量") + pz("活a2宽常数"))
                    dr("固b2宽") = dr("宽度") * pz("固b2宽常量") + pz("固b2宽常数")
                    dr("固c宽") = dr("宽度") * pz("固c宽常量") + pz("固c宽常数")
                    
                ElseIf ac = "L" Then
                    If af = "Q" Or af = "G4" Then
                        dr("固b宽") = dr("长度") * pz("固b宽常量") + pz("固b宽常数")
                        dr("活a2宽") = dr("宽度") * pz("活a2宽常量") + pz("活a2宽常数")
                        dr("固b2宽") = dr("宽度") * pz("固b2宽常量") + pz("固b2宽常数")
                        dr("固c宽") = dr("宽度") * pz("固c宽常量") + pz("固c宽常数")
                    Else
                        dr("固b宽") = dr("长度") - dr("活a宽") + pz("固b宽常数")
                        dr("活a2宽") = dr("宽度") * pz("活a2宽常量") + pz("活a2宽常数")
                        dr("固b2宽") = dr("宽度") - dr("活a2宽") + pz("固b2宽常数")
                        dr("固c宽") = dr("宽度") * pz("固c宽常量") + pz("固c宽常数")
                    End If
                    
                ElseIf ac = "R" Then
                    dr("固b宽") = iif(pz("固b宽常数") >= 250,pz("固b宽常数"),dr("长度") * pz("固b宽常量") + pz("固b宽常数"))
                    dr("活a2宽") = iif(pz("活a2宽常数") >= 250,pz("活a2宽常数"),dr("宽度") * pz("活a2宽常量") + pz("活a2宽常数"))
                    dr("固b2宽") = iif(pz("固b2宽常数") >= 250,pz("固b2宽常数"),dr("宽度") * pz("固b2宽常量") + pz("固b2宽常数"))
                    dr("固c宽") = iif(pz("固c宽常数") >= 250,pz("固c宽常数"),dr("宽度") * pz("固c宽常量") + pz("固c宽常数"))
                    
                ElseIf ac = "D" Then
                    dr("固b宽") = dr("宽度") + pz("固b宽常数")
                    dr("固c宽") = dr("深度") + pz("固c宽常数")
                    dr("活a2宽") = dr("长度") * pz("活a2宽常量") + pz("活a2宽常数")
                    dr("固b2宽") = dr("深度") * pz("固b2宽常量") + pz("固b2宽常数")
                    
                ElseIf ac = "E" Then
                    If ad = "32" Then
                        dr("活a2宽") = iif(pz("活a2宽常数") >= 250,pz("活a2宽常数"),dr("长度") + pz("活a2宽常数"))
                        dr("固b宽") = dr("宽度") + pz("固b宽常数")
                        dr("固b2宽") = dr("宽度") + pz("固b2宽常数")
                        dr("固t宽") = dr("深度") + pz("固t宽常数")
                    ElseIf ad = "42" Or ad = "52" Then
                        dr("活a2宽") = iif(pz("活a2宽常数") >= 250,pz("活a2宽常数"),dr("长度") * pz("活a2宽常量") + pz("活a2宽常数"))
                        dr("固b宽") = dr("长度") * pz("固b宽常量") - dr("活a宽") + pz("固b宽常数")
                        dr("固b2宽") = dr("长度") - dr("活a宽") - dr("活a2宽") - dr("固b宽")  + pz("固b2宽常数")
                        dr("固c宽") = dr("宽度") + pz("固c宽常数")
                        dr("固c2宽") = dr("宽度") + pz("固c2宽常数")
                        dr("固t宽") = dr("深度") + pz("固t宽常数")
                    ElseIf ad = "62" Then
                        dr("活a2宽") = iif(pz("活a2宽常数") >= 250,pz("活a2宽常数"),dr("长度") * pz("活a2宽常量") + pz("活a2宽常数"))
                        dr("固b宽") = dr("长度") * pz("固b宽常量") - dr("活a宽") + pz("固b宽常数")
                        dr("固b2宽") = dr("长度") - dr("活a宽") - dr("活a2宽") - dr("固b宽") - dr("固c宽") + pz("固b2宽常数")
                        dr("固c宽") = dr("长度") * pz("固c宽常量") + pz("固c宽常数")
                        dr("固c2宽") = dr("宽度") + pz("固c2宽常数")
                        dr("固c3宽") = dr("宽度") + pz("固c3宽常数")
                        dr("固t宽") = dr("深度") + pz("固t宽常数")
                    End If
                End If
            End If
    End Select


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/13 14:27:00 [只看该作者]

没看懂你的问题,如何测试数据?【生产单】表下,怎么测试,得到怎么样的数据是错误的?正确的数据是怎样的?

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


加好友 发短信
等级:幼狐 帖子:55 积分:439 威望:0 精华:0 注册:2017/6/5 21:39:00
  发帖心情 Post By:2018/3/13 20:24:00 [只看该作者]

老师,不是数据错误,而是没有数据。请看随函的图片,您一看就会明白问题的了。


图片点击可在新窗口打开查看此主题相关图片如下:qq图片20180313201254.png
图片点击可在新窗口打开查看


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


加好友 发短信
等级:超级版主 帖子:105948 积分:538809 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/3/13 20:53:00 [只看该作者]

隐藏的“订单号”列没有值,所以以下判断通不过,关键的列就没有必要隐藏了

 If pr IsNot Nothing And pz IsNot Nothing Then

 回到顶部