以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]跨表引用数据计算并且进行逻辑判断怎么设置  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=116914)

--  作者:Ajing2003
--  发布时间:2018/4/2 17:03:00
--  [求助]跨表引用数据计算并且进行逻辑判断怎么设置
请教一下,体积和重量两列比选大的数据填入计费吨,然后后三列的数据计算是以计费吨为基数乘以另一张表对应的参数值,而且这三列只能选择一列显示数据,请高手给改下代码吧,现在后面三列不计算。
Select Case e.DataCol.name
    
    Case "体积m3","重量t"
        If e.DataRow.Isnull("体积m3") = True AndAlso e.DataRow("重量t") = True Then
            e.DataRow("计费吨") = Nothing  \'2个要比较的列都为空,则接受列为空
        Else
            If e.DataRow("体积m3") >= e.DataRow("重量t") Then
                e.DataRow("计费吨") = e.DataRow("体积m3")
            Else
                e.DataRow("计费吨") = e.DataRow("重量t")
            End If
            
        End If
        
    Case "计费吨"
        If e.NewValue IsNot Nothing Then
            Dim nms() As String = {"国内费用_港杂费_散装","国内费用_港杂费_集装箱20GP","国内费用_港杂费_集装箱40GP"}
            For Each nm As String In nms
                If nm <> e.DataCol.Name Then
                    e.DataRow(nm) = Nothing
                End If
            Next
            Dim dr As DataRow = DataTables("调遣费参数表").find("参数名 = \'国内港杂费 散装\'")  \'一般是要查找具体的参数所在行
            If dr IsNot Nothing Then
                e.DataRow("国内费用_港杂费_散装") = e.DataRow("计费吨") * dr("值")
            End If
            
            
            Dim ar As DataRow = DataTables("调遣费参数表").find("参数名 = \'国内港杂费 集装箱(20GP)\'")  \'一般是要查找具体的参数所在行
            If ar IsNot Nothing Then
                e.DataRow("国内费用_港杂费_集装箱20GP") = e.DataRow("计费吨") * ar("值")
            End If
            
            Dim cr As DataRow = DataTables("调遣费参数表").find("参数名 = \'国内港杂费 集装箱(40GP)\'")  \'一般是要查找具体的参数所在行
            If cr IsNot Nothing Then
                e.DataRow("国内费用_港杂费_集装箱40GP") = e.DataRow("计费吨") * cr("值")
            End If
        End If
End Select

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


--  作者:有点甜
--  发布时间:2018/4/2 17:24:00
--  

测试了一下,代码逻辑没有问题。

 

如果不触发,应该是你【计费吨】是表达式列导致的吧? 表达式列不会触发datacolchanged事件

 

http://www.foxtable.com/webhelp/scr/2381.htm

 


--  作者:Ajing2003
--  发布时间:2018/4/2 17:41:00
--  
计费吨是双精度小数,我在想是不是因为这三列只出来列的数值无法判断啊,这样是不是要做个下接列表三选一,然后根据选中的方式计算费用啊,如果是这样的话,要怎么改呢
--  作者:有点甜
--  发布时间:2018/4/2 17:57:00
--  

1、加入msgbox,看能否进入执行了你后面的代码;

 

2、我测试没问题,如果你的有问题,上传具体foxtable项目测试。


--  作者:Ajing2003
--  发布时间:2018/4/4 10:11:00
--  
[此贴子已经被作者于2018/4/4 10:38:42编辑过]

--  作者:有点甜
--  发布时间:2018/4/4 10:36:00
--  
请上传foxtable项目测试,不要上传excel表格。
--  作者:Ajing2003
--  发布时间:2018/4/4 10:38:00
--  
已上传,麻烦老师看下
--  作者:Ajing2003
--  发布时间:2018/4/4 10:38:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:机械费计算.foxdb


--  作者:Ajing2003
--  发布时间:2018/4/4 11:29:00
--  
已上传,麻烦老师看下
--  作者:有点甜
--  发布时间:2018/4/4 12:01:00
--  

参考代码

 

Select Case e.DataCol.name   
    Case "体积m3","重量t"
        If e.DataRow.Isnull("体积m3") = True AndAlso e.DataRow("重量t") = True Then
            e.DataRow("计费吨") = Nothing  \'2个要比较的列都为空,则接受列为空
        Else
            If e.DataRow("体积m3") >= e.DataRow("重量t") Then
                e.DataRow("计费吨") = e.DataRow("体积m3")
            Else
                e.DataRow("计费吨") = e.DataRow("重量t")
            End If
        End If
    Case "计费吨", "国内费用_港杂费_卸车费"
        Dim dr As DataRow= DataTables("调遣费参数表").Find("参数名 = \'国内费用_港杂费_卸车费\'")
        If dr IsNot Nothing Then \'如果找到了同名的产品行,也就是dr不是Nothing
            e.DataRow("国内费用_港杂费_卸车费") = e.DataRow ("计费吨") * dr("值")
        End If
End Select