以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 代码出错了 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=108348) |
-- 作者:有点甜 -- 发布时间:2017/10/20 15:42:00 -- 看代码没应该没错。
1、加入msgbox定位出错位置 http://www.foxtable.com/webhelp/scr/1485.htm
2、不会做发实例上来。 |
-- 作者:有点甜 -- 发布时间:2017/10/20 16:34:00 -- Dim dr As DataRow = e.DataRow Select Case e.DataCol.Name Case "费用计算式","费率","金额","专业编号" If e.DataRow.IsNull("费用计算式") = False Then Dim str As String = e.DataRow("费用计算式") Dim pattern As String = "{.+?}" Dim rgx = new System.Text.RegularExpressions.Regex(pattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase) For Each match As System.Text.RegularExpressions.Match In rgx.Matches(str) Dim fdr = e.DataTable.Find("序号 = \'" & match.Value.trim("{","}") & "\'" & iif(dr.IsNull("专业编号"), ""," And 专业编号 = \'" & dr("专业编号") & "\'")) If fdr IsNot Nothing Then str = str.replace(match.Value, fdr("金额")) End If Next pattern = "\\[\\.+?\\]" rgx = new System.Text.RegularExpressions.Regex(pattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase) For Each match As System.Text.RegularExpressions.Match In rgx.Matches(str) str = str.replace(match.Value, e.DataRow(match.Value.trim("[","]"))) Next If TryEval(str, e.DataRow) Then e.DataRow("金额") = Eval2(str,e.DataRow) Else msgbox("计算公式有错误,请核对!") End If End If Dim flt1 As String = "清单类别 = \'分部分项\' And 项目编码 <> \'\'" & iif(dr.IsNull("专业编号"), ""," And 专业编号 = \'" & dr("专业编号") & "\'") Dim flt2 As String = " 清单类别 = \'技术措施\' And 项目编码 <> \'\'" & iif(dr.IsNull("专业编号"), ""," And 专业编号 = \'" & dr("专业编号") & "\'") If dr("费用名称") = "工程量清单分部分项工程费" Then dr("金额") = DataTables("合同清单").Compute("Sum(合价)",flt1) ElseIf dr("费用名称") = "施工技术措施项目费" Then dr("金额") = DataTables("合同清单").Compute("Sum(合价)",flt2) ElseIf dr("费用名称") = "分部分项(人工费+机械费)" Then dr("金额") = DataTables("合同清单").Compute("Sum(其中_人工费)",flt1) + DataTables("合同清单").Compute("Sum(其中_机械费)",flt1) ElseIf dr("费用名称") = "技措项目(人工费+机械费)" Then dr("金额") = DataTables("合同清单").Compute("Sum(其中_人工费)",flt2) + DataTables("合同清单").Compute("Sum(其中_机械费)",flt2) End If End Select |
-- 作者:有点甜 -- 发布时间:2017/10/20 16:36:00 -- 你新增行的时候,不要触发datacolchanged事件,因为没必要计算。
http://www.foxtable.com/webhelp/scr/2218.htm
|