以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]分页流水账是否可按项目统计余额  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=67992)

--  作者:乡里出城
--  发布时间:2015/5/7 16:59:00
--  [求助]分页流水账是否可按项目统计余额

1、参考Foxtable教程里的3.15.25.3非等于比较,写了以下代码


Dim drs As List(of DataRow) = DataTables("A").Select("", "付款银行,日期") \'注意排序参数
drs(0)("
余额") = drs(0)("收入") - drs(0)("支出") \'设置第一行的余额
For
i As Integer = 1 To drs.Count - 1  \'从第二行开始逐行计算余额
    If
drs(i)(" 付款银行") = drs(i - 1)(" 付款银行") Then
        drs(i)("
余额") = drs(i-1)("余额") + drs(i)("收入") -  drs(i)("支出")
    Else

        drs(i)("
余额") = drs(i)("收入") -  drs(i)("支出")
    End
If
Next


现在我需要求助的是这个代码只能计算当页加载的数据,从加载的第一行算了,不能承接前面的余额,请问代码应该怎么写,虽然教程和foxtable\\开发版\\CaseStudy案例里有一个分页流水账案例,但它那里没有分那个项目或那个付款银行进行统计余额,如果参照分页流水账的那个案例,应该怎么修改其代码,才可以直接在后台按付款银行进统计余额,谢谢。

现在上传例子
 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:分页流水账(按项目统计).foxdb

[此贴子已经被作者于2015/5/8 10:33:57编辑过]

--  作者:Bin
--  发布时间:2015/5/7 17:02:00
--  
参考帮助 http://www.foxtable.com/help/topics/2926.htm
--  作者:狐狸爸爸
--  发布时间:2015/5/7 17:02:00
--  
注意表的AfterLoad事件也有关键代码,帮助没有提及。

--  作者:乡里出城
--  发布时间:2015/5/7 17:26:00
--  回复:(Bin)参考帮助 http://www.foxtable.com...
我也看了,可是是刚学,不知道怎么去表达修改,想问
图片点击可在新窗口打开查看此主题相关图片如下:库存表.png
图片点击可在新窗口打开查看
一下有没在分页加载与流水账的例子一的基础上,加多一个例子二
--  作者:Bin
--  发布时间:2015/5/7 17:28:00
--  
看2楼的帮助和3楼的提醒,如果搞不定.把例子发上来
--  作者:乡里出城
--  发布时间:2015/5/7 17:42:00
--  回复:(Bin)看2楼的帮助和3楼的提醒,如果搞不定.把例...
我笨笨的问一句,上传例子?我现在所有的都是连接SQL服务器的数据,是不是把案例和SQL数据库一起上传?
--  作者:大红袍
--  发布时间:2015/5/7 18:04:00
--  

 加一列 产品 列,暂时这样做,其余事件代码,你照着思路改一下

 

 Datacolchanged事件

 

Select Case e.DataCol.Name
    Case "收入","支出","产品"
        Dim dr As DataRow
        Dim mr As DataRow = e.DataRow
        Dim drs As List(of DataRow)
        dr = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And [产品] = \'" & mr("产品") & "\'", "[_SortKey] Desc")
        Dim jc As Double =  DataTables("例子一").SQLCompute("Sum(收入) - Sum(支出)","[_SortKey] < " & e.DataRow("_SortKey") & " And [产品] = \'" & mr("产品") & "\'")
        If dr Is Nothing Then
            mr("余额") = mr("收入") - mr("支出") + jc
            dr = mr
        End If
        drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And [产品] = \'" & dr("产品") & "\'", "[_SortKey]")
        For i As Integer = 1 To drs.Count - 1
            drs(i)("余额") = drs(i-1)("余额") + drs(i)("收入") - drs(i)("支出")
        Next
        If e.DataCol.Name = "产品" AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then
            dr = e.DataTable.Find("[_SortKey] < " & mr("_SortKey") & " And [产品] = \'" & e.OldValue & "\'", "[_SortKey] Desc")
            If dr Is Nothing Then
                dr = e.DataTable.Find("[产品] = \'" & e.OldValue & "\'", "[_SortKey]")
                If dr IsNot Nothing Then
                    jc =  DataTables("例子一").SQLCompute("Sum(收入) - Sum(支出)","[_SortKey] < " & mr("_SortKey") & " And [产品] = \'" & e.OldValue & "\'")
                    dr("余额") = dr("收入") - dr("支出") + jc
                End If
            End If
            If dr IsNot Nothing Then
                drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey") & " And [产品] = \'" & dr("产品") & "\'", "[_SortKey]")
                jc =  DataTables("例子一").SQLCompute("Sum(收入) - Sum(支出)","[_SortKey] >= " & dr("_SortKey") & " And [产品] = \'" & dr("产品") & "\'")
                For i As Integer = 1 To drs.Count - 1
                    drs(i)("余额") = drs(i-1)("余额") + drs(i)("收入") - drs(i)("支出") + jc
                Next
            End If
        End If
End Select

 

Afterload事件

 

If e.DataTable.DataRows.count > 0 Then
   Dim cps As String = e.DataTable.GetComboListString("产品").Replace("|", "\',\'")
   e.DataTable.DataCols("支出").RaiseDataColChanged("产品 in (\'" & cps & "\')")
End If


--  作者:乡里出城
--  发布时间:2015/5/7 18:13:00
--  回复:(Bin)看2楼的帮助和3楼的提醒,如果搞不定.把例...
上了例子 ,看怎么样才能按付款银行作为项目统计,每页正确显示每一个付款银行的结余,谢谢
--  作者:乡里出城
--  发布时间:2015/5/7 18:14:00
--  回复:(大红袍) 加一列 产品 列,暂时这样做,...
好的,非常感谢,我先试一下,
--  作者:乡里出城
--  发布时间:2015/5/8 9:21:00
--  [讨论]回复:(大红袍) 加一列 产品 列,暂时这样做,...

你好,我不是很明白,想请教一下,为什么下面Afterload事件里的第三条代码只需要e.DataTable.DataCols("支出").RaiseDataColChanged("产品 in (\'" & cps & "\')"),为什么不需要e.DataTable.DataCols("收入").RaiseDataColChanged("产品 in (\'" & cps & "\')"),谢谢



Afterload事件

 

If e.DataTable.DataRows.count > 0 Then
   Dim cps As String = e.DataTable.GetComboListString("产品").Replace("|", "\',\'")
   e.DataTable.DataCols("支出").RaiseDataColChanged("产品 in (\'" & cps & "\')")
End If