以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 数据累加 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=128593) |
-- 作者:aza520 -- 发布时间:2018/12/11 13:06:00 -- 数据累加 有以下表,增加行时,在前面四列一样的条件下,输入本次数量,请问老师,有什么方法可以让最后两列自动生成。且可以从后台提取数据累加。 |
-- 作者:y2287958 -- 发布时间:2018/12/11 14:46:00 -- 在DataColChanged事件中写代码 |
-- 作者:有点甜 -- 发布时间:2018/12/11 14:50:00 -- 参考
http://www.foxtable.com/webhelp/scr/1572.htm
http://www.foxtable.com/webhelp/scr/2136.htm
http://www.foxtable.com/webhelp/scr/2926.htm
|
-- 作者:aza520 -- 发布时间:2018/12/12 17:28:00 -- 老师,在图中的报表有一列累计申报数量,我相通过录入申报数量后,累计申报数量列自动累加。表中的"项目名称","施工合同段","支付编号","桩号"是控制列。 表DataColChanged事件: Select Case e.DataCol.Name Case "项目名称","施工合同段","支付编号","桩号","申报数量" Dim drs As List(of DataRow) Dim Filter As String Filter = "[_SortKey] >= " & e.DataRow("_SortKey") & " And [项目名称] = \'" & e.DataRow("项目名称") & " And [施工合同段] = \'" & e.DataRow("施工合同段") & " And [支付编号] = \'" & e.DataRow("支付编号") & " And [桩号] = \'" & e.DataRow("桩号") & "\'" drs = e.DataTable.Select(Filter) For Each dr As DataRow In drs Filter = "[_SortKey] <= " & dr("_SortKey") & " And [项目名称] = \'" & e.DataRow("项目名称") & " And [施工合同段] = \'" & e.DataRow("施工合同段") & " And [支付编号] = \'" & e.DataRow("支付编号") & " And [桩号] = \'" & e.DataRow("桩号") & "\'" Dim Val1 As Double = e.DataTable.Compute("Sum(申报数量)",Filter) dr("累计申报数量") = Val1 Next If e.DataCol.Name = "项目名称" AndAlso e.DataCol.Name = "施工合同段" AndAlso e.DataCol.Name = "支付编号" AndAlso e.DataCol.Name = "桩号" AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then Filter = "[_SortKey] > " & e.DataRow("_SortKey") & " And [项目名称] = \'" & e.OldValue & "\' And [施工合同段] = \'" & e.OldValue & "\' And [施工合同段] = \'" & e.OldValue & "\' And [支付编号] = \'" & e.OldValue & "\' And [桩号] = \'" & e.OldValue & "\'" drs = e.DataTable.Select(Filter) For Each dr As DataRow In drs Filter = "[_SortKey] <= " & dr("_SortKey") & " And [项目名称] = \'" & dr("项目名称") & "\'" Dim Val1 As Double = e.DataTable.Compute("Sum(申报数量)",Filter) dr("累计申报数量") = Val1 Next End If End Select 表AfterMoveRow: Dim Key As Decimal Dim Index As Integer Dim Filter As String Dim r As Row Index = Math.Min(e.OldIndex, e.NewIndex) Key = e.Table.Rows(Index)("_SortKey") r = e.Table.Rows(e.NewIndex) Filter = "[_SortKey] >= " & Key & " And [项目名称] = \'" & r("项目名称") & "\' And [施工合同段] = \'" & r("施工合同段") & "\' And [支付编号] = \'" & r("支付编号") & "\' And [桩号] = \'" & r("桩号") & "\'" e.Table.DataTable.DataCols("申报数量").RaiseDataColChanged(Filter) 表DataRowDeleting e.DataRow("申报数量") = 0 表AfterLoad: Dim drs As New List(of DataRow) For Each nm As String In e.DataTable.GetValues("项目名称") \'找出每个产品的第一行数据, 添加到集合drs中 drs.Add(e.DataTable.Find("项目名称 = \'" & nm & "\'", "[_SortKey]")) Next For Each r As DataRow In drs e.DataTable.DataCols("申报数量").RaiseDataColChanged(r) Next |
-- 作者:有点甜 -- 发布时间:2018/12/12 18:27:00 -- 1、现在遇到什么问题?
2、实例发上来测试。 |
-- 作者:aza520 -- 发布时间:2018/12/13 9:05:00 -- 显示错误: .NET Framework 版本:2.0.50727.8937
Foxtable 版本:2017.12.18.1 错误所在事件:表,中间计量表, DataColChanged 详细错误信息: 调用的目标发生了异常。 语法错误:“No”运算符后缺少操作数。 |
-- 作者:有点甜 -- 发布时间:2018/12/13 9:07:00 -- 你编写的条件要正确,如
Filter = "[_SortKey] >= " & e.DataRow("_SortKey") & " And [项目名称] = \'" & e.DataRow("项目名称") & "\' And [施工合同段] = \'" & e.DataRow("施工合同段") & "\' And [支付编号] = \'" & e.DataRow("支付编号") & "\' And [桩号] = \'" & e.DataRow("桩号") & "\'" |
-- 作者:aza520 -- 发布时间:2018/12/14 16:28:00 -- 4楼的代码经老师指点后可以累加数据了,现在又遇到问题,连续输入数据时没问题,如图一,此时计量期次为2,桩号为K30+000~K31+000的行累计申报数量是20,此时当我选择性只加载计量期次为2的数据时,如图二,则桩号为K30+000~K31+000的行累计申报数量又变成了10,请问老师是不是我以下代码不正确。数据累加的控制条件是"项目名称","施工合同段","支付编号","桩号"四列(参见4楼代码) 表AfterLoad: Dim drs As New List(of DataRow) For Each nm As String In e.DataTable.GetValues("项目名称") \'找出每个产品的第一行数据, 添加到集合drs中 drs.Add(e.DataTable.Find("项目名称 = \'" & nm &
"\'", "[_SortKey]")) Next For Each r As DataRow In drs e.DataTable.DataCols("申报数量").RaiseDataColChanged(r) Next |
-- 作者:aza520 -- 发布时间:2018/12/14 16:29:00 -- 图一: 图二:
|
-- 作者:有点甜 -- 发布时间:2018/12/14 17:35:00 -- 这种就比较麻烦了,参考
http://www.foxtable.com/webhelp/scr/2926.htm
|