以文本方式查看主题
- 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案例里有一个分页流水账案例,但它那里没有分那个项目或那个付款银行进行统计余额,如果参照分页流水账的那个案例,应该怎么修改其代码,才可以直接在后台按付款银行进统计余额,谢谢。
[此贴子已经被作者于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
|