Foxtable(狐表)用户栏目专家坐堂 → datacolchanged事件无法自动计算


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

主题:datacolchanged事件无法自动计算

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


加好友 发短信
等级:幼狐 帖子:158 积分:1004 威望:0 精华:0 注册:2021/8/17 15:39:00
datacolchanged事件无法自动计算  发帖心情 Post By:2022/5/5 21:39:00 [只看该作者]

如图所示,当我输入两个不同的费率后,合价部分无法汇总计算。
请问我的代码逻辑是不是有错误?
代码如下:
Select Case e.DataCol.Name
    Case "其中_管理费率","利润费率"
        Dim dr As DataRow = e.DataRow
        If dr.IsNull("其中_管理费率") OrElse dr.IsNull("利润费率") Then
            dr("其中_管理费") = Round2((dr("其中_人工费") + dr("其中_机具费")) * dr("其中_管理费率"),2)
            dr("利润") = Round2((dr("其中_人工费") + dr("其中_机具费")) * dr("利润费率"),2)
            dr("基价") = dr("其中_人工费") + dr("其中_材料费") + dr("其中_机具费") + dr("其中_管理费")
            dr("综合单价") = dr("基价") + dr("利润")
        Else
            dr("其中_管理费") = Nothing
            dr("利润") = Nothing
            dr("基价") = dr("其中_人工费") + dr("其中_材料费") + dr("其中_机具费") + dr("其中_管理费")
            dr("综合单价") = dr("基价") + dr("利润")
        End If
End Select


图片点击可在新窗口打开查看此主题相关图片如下:微信图片_20220505213657.png
图片点击可在新窗口打开查看
[此贴子已经被作者于2022/5/5 21:42:10编辑过]

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


加好友 发短信
等级:幼狐 帖子:158 积分:1004 威望:0 精华:0 注册:2021/8/17 15:39:00
  发帖心情 Post By:2022/5/5 21:39:00 [只看该作者]

Select Case e.DataCol.Name
    Case "其中_管理费率","利润费率"
        Dim dr As DataRow = e.DataRow
        If dr.IsNull("其中_管理费率") OrElse dr.IsNull("利润费率") Then
            dr("其中_管理费") = Round2((dr("其中_人工费") + dr("其中_机具费")) * dr("其中_管理费率"),2)
            dr("利润") = Round2((dr("其中_人工费") + dr("其中_机具费")) * dr("利润费率"),2)
            dr("基价") = dr("其中_人工费") + dr("其中_材料费") + dr("其中_机具费") + dr("其中_管理费")
            dr("综合单价") = dr("基价") + dr("利润")
        Else
            dr("其中_管理费") = Nothing
            dr("利润") = Nothing
            dr("基价") = dr("其中_人工费") + dr("其中_材料费") + dr("其中_机具费") + dr("其中_管理费")
            dr("综合单价") = dr("基价") + dr("利润")
        End If
End Select

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


加好友 发短信
等级:超级版主 帖子:110738 积分:563610 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/5/5 22:32:00 [只看该作者]

Dim dr As DataRow = e.DataRow
Select Case e.DataCol.Name
    Case "其中_管理费率", "其中_机具费", "其中_人工费"
        If dr.IsNull("其中_管理费率") Then
            dr("其中_管理费") = Nothing
        Else
            dr("其中_管理费") = Round2((dr("其中_人工费") + dr("其中_机具费")) * dr("其中_管理费率"), 2)
        End If 
End Select
Select Case e.DataCol.Name
    Case "利润费率", "其中_机具费", "其中_人工费"
        If dr.IsNull("其中_管理费率") Then
            dr("利润") = Nothing
        Else
            dr("利润") = Round2((dr("其中_人工费") + dr("其中_机具费")) * dr("利润费率"), 2)
        End If 
End Select
Select Case e.DataCol.Name
    Case "其中_材料费", "其中_机具费", "其中_人工费", "其中_管理费"
        dr("基价") = dr("其中_人工费") + dr("其中_材料费") + dr("其中_机具费") + dr("其中_管理费") 
    Case "基价", "利润"
        dr("综合单价") = dr("基价") + dr("利润")
End Select


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


加好友 发短信 一级勋章
等级:超级版主 帖子:7258 积分:40773 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2022/5/5 22:39:00 [只看该作者]

不是这么干的,工程量列呢?

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


加好友 发短信
等级:幼狐 帖子:158 积分:1004 威望:0 精华:0 注册:2021/8/17 15:39:00
  发帖心情 Post By:2022/5/5 23:16:00 [只看该作者]

暂时不需要工程量列,默认工程量列为1

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


加好友 发短信
等级:幼狐 帖子:158 积分:1004 威望:0 精华:0 注册:2021/8/17 15:39:00
  发帖心情 Post By:2022/5/5 23:17:00 [只看该作者]

请问为什么要把这几个列的变化情况分别写呢?
合在一个语句里不是更简洁吗?

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


加好友 发短信
等级:超级版主 帖子:110738 积分:563610 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/5/6 8:32:00 [只看该作者]

写简洁代码那是高手无所事事的情况下做的事。一般人只需要根据实际情况写出符合业务逻辑的代码就够了。再说简洁和解决问题之间也没有什么直接的关系。

a列依赖,b、c、d...等等列进行计算,那么就必须case a、b、c、...等列。但是不同计算依赖的列有重复的,所以需要另外处理,看看:http://www.foxtable.com/webhelp/topics/2242.htm

 回到顶部