Foxtable(狐表)用户栏目专家坐堂 → 数据累加


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

主题:数据累加

帅哥哟,离线,有人找我吗?
aza520
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:689 积分:5155 威望:0 精华:0 注册:2017/10/22 10:15:00
数据累加  发帖心情 Post By:2018/12/11 13:06:00 [显示全部帖子]

有以下表,增加行时,在前面四列一样的条件下,输入本次数量,请问老师,有什么方法可以让最后两列自动生成。且可以从后台提取数据累加。


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


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


加好友 发短信
等级:三尾狐 帖子:689 积分:5155 威望:0 精华:0 注册:2017/10/22 10:15:00
  发帖心情 Post By: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


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


加好友 发短信
等级:三尾狐 帖子:689 积分:5155 威望:0 精华:0 注册:2017/10/22 10:15:00
  发帖心情 Post By:2018/12/13 9:05:00 [显示全部帖子]

显示错误:
.NET Framework 版本:2.0.50727.8937
Foxtable 版本:2017.12.18.1
错误所在事件:表,中间计量表, DataColChanged
详细错误信息:
调用的目标发生了异常。
语法错误:“No”运算符后缺少操作数。

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


加好友 发短信
等级:三尾狐 帖子:689 积分:5155 威望:0 精华:0 注册:2017/10/22 10:15:00
  发帖心情 Post By: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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:689 积分:5155 威望:0 精华:0 注册:2017/10/22 10:15:00
  发帖心情 Post By:2018/12/14 16:29:00 [显示全部帖子]

图一:

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

图二:

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



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


加好友 发短信
等级:三尾狐 帖子:689 积分:5155 威望:0 精华:0 注册:2017/10/22 10:15:00
  发帖心情 Post By:2018/12/15 11:51:00 [显示全部帖子]

这个代码能这样写吗


Dim drs As New List(of DataRow)

For Each nm As String In e.DataTable.GetValues("项目名称","施工合同段","","支付编号","桩号") '找出每个产品的第一行数据添加到集合drs

    drs.Add(e.DataTable.Find("项目名称 = '" & nm & "'and项目名称 = '" & nm & "' and 施工合同段 = '" & nm & "' and 支付编号 = '" & nm & "' and 桩号 = '" & nm & "'", "[_SortKey]"))

Next

For Each r As DataRow In drs

    e.DataTable.DataCols("申报数量").RaiseDataColChanged(r)

Next

 


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


加好友 发短信
等级:三尾狐 帖子:689 积分:5155 威望:0 精华:0 注册:2017/10/22 10:15:00
  发帖心情 Post By:2018/12/15 16:10:00 [显示全部帖子]

老师,这样可以吗?

Dim Arys As List(Of String()) 
Arys = DataTables("
订单").GetValues("项目名称|施工合同段|支付编号|桩号") '列名用符号|分割
'
注意循环变量是字符型数组,所以类型是String(),而不是String
For Each Ary As String() In Arys
    Output.Show(Ary(0) & "|" & Ary(1) & "|" & Ary(2) & "|" & Ary(3)) 
Next


 回到顶部