以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  数据累加  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=128593)

--  作者:aza520
--  发布时间:2018/12/11 13:06:00
--  数据累加
有以下表,增加行时,在前面四列一样的条件下,输入本次数量,请问老师,有什么方法可以让最后两列自动生成。且可以从后台提取数据累加。


图片点击可在新窗口打开查看此主题相关图片如下:3333.png
图片点击可在新窗口打开查看


--  作者: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
--  
老师,在图中的报表有一列累计申报数量,我相通过录入申报数量后,累计申报数量列自动累加。表中的"项目名称","施工合同段","支付编号","桩号"是控制列。


图片点击可在新窗口打开查看此主题相关图片如下:8888.png
图片点击可在新窗口打开查看

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
--  
图一:

图片点击可在新窗口打开查看此主题相关图片如下:1544775082(1).png
图片点击可在新窗口打开查看

图二:

图片点击可在新窗口打开查看此主题相关图片如下:1544775164(2).png
图片点击可在新窗口打开查看



--  作者:有点甜
--  发布时间:2018/12/14 17:35:00
--  

这种就比较麻烦了,参考

 

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