以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  选择行计算  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=110306)

--  作者:yangwenghd
--  发布时间:2017/11/30 17:13:00
--  选择行计算
能帮忙看看这个吗?
就是合计列得到的数据是  关联编号列 相同的变动编号的最后的一行的合计
比如 关联编号 有20003、20004等,然后 然后20003 和20004相同的还有变动编号,只算出每一个 关联编号相同的切变动编号最后的一行的合计 
就是选择分别选择不同关联编号的变动编号最大增加列数字计算,感谢 感谢 


Select Case e.DataCol.Name
    Case "项目信息_关联编号","增加"
        Dim drs As List(of DataRow)
        Dim Filter As String
        Filter = "[_SortKey] >= " & e.DataRow("_SortKey") & " And [项目信息_关联编号] = \'" & e.DataRow("项目信息_关联编号") & "\'"
        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 Select \'求欠款明细


图片点击可在新窗口打开查看此主题相关图片如下:360截图-1881453.jpg
图片点击可在新窗口打开查看


[此贴子已经被作者于2017/11/30 17:28:12编辑过]

--  作者:有点蓝
--  发布时间:2017/11/30 17:50:00
--  
没看懂你的意思
--  作者:yangwenghd
--  发布时间:2017/11/30 18:02:00
--  
首先感谢你,是这样的,就想计算出 关联编号分别相同的最后一行,最后一行是用变动编号(时间编号)列来确定的,
比如 关联编号有 很多相同的 20003、20004、20005、然后合计就是,20003的最后一行+20004的最后一行+20005的最后一行,感谢 感谢 麻烦了?谢谢
其实就是在增加输入后累计到合计里面,只是合计的条件是,只计算这行前面关联编号分别的最后(变动编号)一行,比如 20003的变动编号有 20171122215614和20171122215631,然后20003就算计20171122215631就可以了,其实就是相同的关联编号只计算一行,计算变动编号的最后一行,麻烦了,感谢 感谢 
[此贴子已经被作者于2017/11/30 18:10:14编辑过]

--  作者:有点甜
--  发布时间:2017/11/30 18:43:00
--  

 某行的合计 = 当前行的增加 + 上一行的增加 ?

 

参考代码

 

 

Select Case e.DataCol.Name
    Case "项目信息_关联编号","增加"
        Dim drs As List(of DataRow)
        Dim Filter As String
        Filter = "[_SortKey] >= " & e.DataRow("_SortKey") & " And [项目信息_关联编号] = \'" & e.DataRow("项目信息_关联编号") & "\'"
        drs = e.DataTable.Select(Filter)
        For Each dr As DataRow In drs
            Filter = "[_SortKey] < " & dr("_SortKey") & " And [项目信息_关联编号] = \'" & dr("项目信息_关联编号") & "\'"
            Dim fdr As DataRow = e.DataTable.find(filter, "_SortKey desc")
            If fdr IsNot Nothing Then
                dr("合计") = fdr("增加")
            Else
                dr("合计") = dr("增加")
            End If
        Next
End Select \'求欠款明细

 

--  作者:yangwenghd
--  发布时间:2017/11/30 19:02:00
--  
感谢,感谢,这样的 叫上一行,只是上一行相同的最加最后一行, 
比如 前面有很多 20003就只加其中的一行,也就是最后一行,20004之前也有很多行,也只加20004的最后一行,
之前的20003相同的 增加列有 5、8、10、3,根据变动编号,确定那一行是被加的,把选择的与20004的最后一行相加,也是根据变动编号的最后一行选择,
就是的合计列 得到是不同的关联编号的和,但是相同的只能计算一行,也就是最后一行,
好比想得 列20003的最后一行加20004的最后一行,这样依次类推,比如添加一行有出现了一个20004(同时也会根据时间出现一个变动编号),然后之前的20004就不计算了,如果又出现了20003,之前的20003也就不计算了,就是相同的关联编号只选中一行计算,把不同的关联编号算计合计,感谢 感谢,我说得有些复杂了,感谢你,费心了,谢谢 谢谢 

图片点击可在新窗口打开查看此主题相关图片如下:360截图-8092781.jpg
图片点击可在新窗口打开查看

[此贴子已经被作者于2017/11/30 19:11:44编辑过]

--  作者:有点甜
--  发布时间:2017/11/30 22:48:00
--  
Select Case e.DataCol.Name
    Case "项目信息_关联编号","增加"
        Dim drs As List(of DataRow)
        Dim Filter As String
        Filter = "[_SortKey] >= " & e.DataRow("_SortKey") & " And [项目信息_关联编号] = \'" & e.DataRow("项目信息_关联编号") & "\'"
        drs = e.DataTable.Select(Filter)
        For Each dr As DataRow In drs
            Filter = "[_SortKey] < " & dr("_SortKey") & " And [项目信息_关联编号] <> \'" & dr("项目信息_关联编号") & "\'"
            Dim fdr As DataRow = e.DataTable.find(filter, "_SortKey desc")
            If fdr IsNot Nothing Then
                dr("合计") = dr("增加")  + fdr("增加")
            Else
                dr("合计") = dr("增加")
            End If
        Next
End Select

--  作者:yangwenghd
--  发布时间:2017/12/1 0:10:00
--  
谢谢 了,非常感谢,这么晚了还麻烦了,只是如果在关联编号列加入其他的不知道为什么有对不上了,比如 后面又加入20006、20007,得出的结果就不对了,麻烦你了。感谢 。困了就早点休息,我在学习 学习,感谢了
--  作者:有点甜
--  发布时间:2017/12/1 9:13:00
--  
 上传具体实例测试。
--  作者:yangwenghd
--  发布时间:2017/12/1 13:59:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:360截图-2345953.jpg
图片点击可在新窗口打开查看
就是把相同的编号选择其中的一行就可以了,这行就是最后一行,感谢 感谢 

合计列只计算当行之前项目编号不同的最后一行。
比如
5行等于五行之前的合计,
第6行就不计算第一行了,因为第一行的编号1在第六行已经发现了,
第7行就不计算第一行和第二行了,因为编号1、2都已经出现了。
第17行就只计算17、16、15、14、行,之前重复的就不用在计算了,感谢 感谢,

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:加减运算.table



--  作者:有点甜
--  发布时间:2017/12/1 14:21:00
--  
Select Case e.DataCol.Name
    Case "项目编号","增加"
        Dim drs As List(of DataRow)
        Dim Filter As String
        Filter = "[_SortKey] >= " & e.DataRow("_SortKey") & ""
        drs = e.DataTable.Select(Filter)
        For Each dr As DataRow In drs
            Filter = "[_SortKey] < " & dr("_SortKey") & ""
            Dim Filter2 = "[_SortKey] < " & dr("_SortKey") & " And [项目编号] = \'" & dr("项目编号") & "\'"
            Dim fdr As DataRow = e.DataTable.find(filter, "_SortKey desc")
            Dim fdr2 As DataRow = e.DataTable.find(filter2, "_SortKey desc")
            If fdr IsNot Nothing Then
                If fdr2 Is Nothing Then
                    dr("合计") = dr("增加")  + fdr("合计")
                Else
                    dr("合计") = dr("增加")  + fdr("合计") - fdr2("增加")
                End If
            Else
                If fdr2 Is Nothing Then
                    dr("合计") = dr("增加")
                Else
                    dr("合计") = dr("增加")  - fdr2("增加")
                End If
            End If
        Next
End Select