以文本方式查看主题 - Foxtable(狐表) (http://www.foxtable.com/bbs/index.asp) -- 专家坐堂 (http://www.foxtable.com/bbs/list.asp?boardid=2) ---- [求助]在新增行修改数据未能触发atacolchanged事件 (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=115705) |
||||
-- 作者:Darcylau -- 发布时间:2018/3/12 23:53:00 -- [求助]在新增行修改数据未能触发atacolchanged事件 老师,您好! 我的项目中有个生产单表,在已有的行内输入型号或修改型号,能够触发datacolchanged事件,产品部件的宽度会自动计算。 但在新增加的行中输入型号或修改型号,则不能触发触发datacolchanged事件,产品部件的宽度没有计算,即便是输入相同的型号。 项目关闭,再重启后,在上次新增的行输入型号或修改型号等,依然未能触发。 不知哪里出错了。
[此贴子已经被作者于2018/3/12 23:59:19编辑过]
|
||||
-- 作者:有点甜 -- 发布时间:2018/3/13 9:36:00 -- 1、贴出你datacolchanged事件代码;
2、调试是否触发,你可以在事件里面加入msgbox(e.datacol.name)等msgbox进行测试的。
3、一般不计算,应该是你数据没写对或者代码没写对,导致查找不到数据计算 |
||||
-- 作者:Darcylau -- 发布时间: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的型号,在原有的数据行内,玻璃的宽度有显示。而在后面新加的行内,玻璃的宽度就没显示。 |
||||
-- 作者:有点甜 -- 发布时间:2018/3/13 12:22:00 -- 1、加入msgbox,看执行到哪里开始出问题;
2、不要死循环 http://www.foxtable.com/webhelp/scr/1522.htm
3、出错的实例发上来测试。 |
||||
-- 作者:Darcylau -- 发布时间:2018/3/13 13:58:00 -- 谢老师提醒,我按您的指点更改了代码,也测试了,没有发现问题。但就是生产单表中下面两行的玻璃宽度没有计算。 麻烦您看看随函发给您的文件。
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 |
||||
-- 作者:有点甜 -- 发布时间:2018/3/13 14:27:00 -- 没看懂你的问题,如何测试数据?【生产单】表下,怎么测试,得到怎么样的数据是错误的?正确的数据是怎样的? |
||||
-- 作者:Darcylau -- 发布时间:2018/3/13 20:24:00 -- 老师,不是数据错误,而是没有数据。请看随函的图片,您一看就会明白问题的了。 |
||||
-- 作者:有点蓝 -- 发布时间:2018/3/13 20:53:00 -- 隐藏的“订单号”列没有值,所以以下判断通不过,关键的列就没有必要隐藏了 If pr IsNot Nothing And pz IsNot Nothing Then
|