以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 判断列计算 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=191458) |
-- 作者:wlj88868 -- 发布时间:2024/4/18 11:34:00 -- 判断列计算 .NET Framework 版本:4.0.30319.42000 Select Case e.DataCol.Name
结算金额算出来也是对的,,会报错, |
-- 作者:有点蓝 -- 发布时间:2024/4/18 11:58:00 -- 不是这段代码的问题、DataColChanged事件所有代码发上来 |
-- 作者:wlj88868 -- 发布时间:2024/4/18 12:19:00 -- If e.DataCol.Name = "结算金额" Then \'如果内容发生变动的是品名列 If e.DataCol.Name = "销售型号" Then \'如果内容发生变动的是品名列 Dim dr1 As DataRow = e.DataRow Select Case e.DataCol.Name
|
-- 作者:wlj88868 -- 发布时间:2024/4/18 12:21:00 -- 前面的代码都试过没有问题呀,,就是最后加的这段有问题,,是不是还少判断参数啊,没有搞过判断列多值计算 |
-- 作者:wlj88868 -- 发布时间:2024/4/18 12:28:00 -- Dim dr4 As DataRow = e.DataRow
改这样也是会计算,也报错,就是结算类别输入代销或者经销的时候就报错 |
-- 作者:wlj88868 -- 发布时间:2024/4/18 12:45:00 -- 不好意思老师,,找到了,,提示错误的好像是算成本,少了一个变量 |
-- 作者:cd_tdh -- 发布时间:2024/4/18 12:51:00 -- If dr3("结算类别") = "代销" Then 你多了括号 不过你代码逻辑有点乱,整理一下,代码如下可供参考: Dim dr As DataRow = e.DataRow Select Case e.DataCol.Name Case "销售型号" If e.NewValue Is Nothing Then \'如果新值是空白,也就是品名列的内容为空 dr("吊牌单价") = Nothing \'那么清空此行单价列的内容 dr("成本单价") = Nothing Else Dim dr1 As DataRow = DataTables("基本资料").Find("[型号] = \'" & e.NewValue & "\'") If dr1 IsNot Nothing Then \'如果找到了同名的产品行,也就是dr不是Nothing dr("吊牌单价") = dr1("单价") dr("成本单价") = dr1("成本") End If End If Case "销售单价", "吊牌单价" dr("折扣扣率") = dr("销售单价") / dr("吊牌单价") Case "销售公司", "销售型号" If dr.IsNull("销售公司") OrElse dr.IsNull("销售型号") Then dr("套餐折扣") = Nothing Else Dim dr2 As DataRow = DataTables("套餐").Find("结算公司 = \'" & dr("销售公司") & "\' And 型号 = \'" & dr("销售型号") & "\'") If dr2 IsNot Nothing Then dr("套餐折扣") = dr2("套餐折扣") End If End If Case "结算类别", "吊牌单价", "销售单价", "套餐折扣" If dr("结算类别") = Nothing Then dr("结算金额") = Nothing dr("成本预算") = Nothing \'那么清空此行单价列的内容 Else If dr("结算类别") = "代销" Then dr("结算金额") = dr("吊牌单价") * dr("套餐折扣") ElseIf dr("结算类别") = ("经销") Then dr("结算金额") = dr("销售单价") * dr("套餐折扣") End If dr("成本预算") = dr("结算金额") - dr("成本单价") End If End Select [此贴子已经被作者于2024/4/18 13:02:48编辑过]
|
-- 作者:有点蓝 -- 发布时间:2024/4/18 14:17:00 -- 可以这样优化一下 Dim dr As DataRow = e.DataRow If e.DataCol.Name = "销售型号" Then \'如果内容发生变动的是品名列 If e.NewValue Is Nothing Then \'如果新值是空白,也就是品名列的内容为空 dr("吊牌单价") = Nothing \'那么清空此行单价列的内容 dr("成本单价") = Nothing Else Dim dr2 As DataRow \'否则在产品表查找同名的产品行,将找到的行赋值给变量dr dr2 = DataTables("基本资料").Find("[型号] = \'" & e.NewValue & "\'") If dr IsNot Nothing Then \'如果找到了同名的产品行,也就是dr不是Nothing dr("吊牌单价") = dr2("单价") dr("成本单价") = dr2("成本") End If End If End If Select Case e.DataCol.Name Case "销售单价", "吊牌单价" If dr.IsNull("销售单价") OrElse dr.IsNull("吊牌单价") OrElse dr("吊牌单价") = 0 Then dr("折扣扣率") = Nothing Else dr("折扣扣率") = dr("销售单价") / dr("吊牌单价") End If End Select Select Case e.DataCol.Name Case "销售公司", "销售型号" If dr.IsNull("销售公司") OrElse dr.IsNull("销售型号") Then dr("套餐折扣") = Nothing Else Dim pr As DataRow Dim filter As String filter = "结算公司 = \'" & dr2("销售公司") & "\' And 型号 = \'" & dr2("销售型号") & "\'" pr = DataTables("套餐").Find(filter) If pr IsNot Nothing Then dr("套餐折扣") = pr("套餐折扣") End If End If Case "吊牌单价", "套餐折扣", "结算类别", "销售单价" If dr("结算类别") = "代销" Then dr("结算金额") = dr("吊牌单价") * dr("套餐折扣") ElseIf dr("结算类别") = "经销" Then dr("结算金额") = dr("销售单价") * dr("套餐折扣") End If Case "结算金额", "成本单价" If dr.IsNull("结算金额") OrElse dr.IsNull("成本单价") Then \'如果新值是空白,也就是品名列的内容为空 dr("成本预算") = Nothing \'那么清空此行单价列的内容 Else \'否则在产品表查找同名的产品行,将找到的行赋值给变量dr dr("成本预算") = dr("结算金额") - dr("成本单价") End If End Select |
-- 作者:wlj88868 -- 发布时间:2024/4/18 19:15:00 -- 感谢7楼和蓝老师 |