Foxtable(狐表)用户栏目专家坐堂 → [求助]跨表引用数据计算并且进行逻辑判断怎么设置


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

主题:[求助]跨表引用数据计算并且进行逻辑判断怎么设置

美女呀,离线,留言给我吧!
Ajing2003
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:21 积分:217 威望:0 精华:0 注册:2017/6/7 18:04:00
[求助]跨表引用数据计算并且进行逻辑判断怎么设置  发帖心情 Post By: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


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


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

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

 

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

 

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

 


 回到顶部
美女呀,离线,留言给我吧!
Ajing2003
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:21 积分:217 威望:0 精华:0 注册:2017/6/7 18:04:00
  发帖心情 Post By:2018/4/2 17:41:00 [只看该作者]

计费吨是双精度小数,我在想是不是因为这三列只出来列的数值无法判断啊,这样是不是要做个下接列表三选一,然后根据选中的方式计算费用啊,如果是这样的话,要怎么改呢

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


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

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

 

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


 回到顶部
美女呀,离线,留言给我吧!
Ajing2003
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:21 积分:217 威望:0 精华:0 注册:2017/6/7 18:04:00
  发帖心情 Post By:2018/4/4 10:11:00 [只看该作者]

[此贴子已经被作者于2018/4/4 10:38:42编辑过]

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


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

请上传foxtable项目测试,不要上传excel表格。

 回到顶部
美女呀,离线,留言给我吧!
Ajing2003
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:21 积分:217 威望:0 精华:0 注册:2017/6/7 18:04:00
  发帖心情 Post By:2018/4/4 10:38:00 [只看该作者]

已上传,麻烦老师看下

 回到顶部
美女呀,离线,留言给我吧!
Ajing2003
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:21 积分:217 威望:0 精华:0 注册:2017/6/7 18:04:00
  发帖心情 Post By:2018/4/4 10:38:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:机械费计算.foxdb


 回到顶部
美女呀,离线,留言给我吧!
Ajing2003
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:21 积分:217 威望:0 精华:0 注册:2017/6/7 18:04:00
  发帖心情 Post By:2018/4/4 11:29:00 [只看该作者]

已上传,麻烦老师看下

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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


 回到顶部
总数 16 1 2 下一页