Foxtable(狐表)用户栏目专家坐堂 → 分页加载与流水账,代码问题,老师帮忙看下!


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

主题:分页加载与流水账,代码问题,老师帮忙看下!

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


加好友 发短信
等级:一尾狐 帖子:459 积分:3137 威望:0 精华:0 注册:2014/2/13 9:22:00
分页加载与流水账,代码问题,老师帮忙看下!  发帖心情 Post By:2014/5/27 9:10:00 [只看该作者]

http://www.foxtable.com/help/index.html?n=2926.htm

例子上只有收入和支出2个列。如果我的系统里多了一列“结余”,“入库数量”和“出库数量”都是表达式列!如下图: 


此主题相关图片如下:qq图片20140527090352.jpg
按此在新窗口浏览图片

 

我的代码如下:

1、删除原来的余额列,然后在项目事件Initialize中设置代码:

DataTables("fucai").DataCols.Add("总库存",Gettype(Double))  '添加余额列,用于动态显示余额

2、将DataColChanged事件设为: (因为结余列是最初的原始库存,不是表达式列,这个代码我不知道结余列这样写对不对?)

Select Case e.DataCol.Name

    Case "结余","出库数量","入库数量"
        Dim dr As DataRow
        Dim drs As List(of DataRow)
        dr = e.DataTable.Find("[_SortKey] < " & e.DataRow("_SortKey"), "[_SortKey] Desc") '找出上一行
        If dr Is Nothing Then '如果没有找到上一行,说明本行就是第一行
            Dim jc As Double '计算之前的结存
            jc =  DataTables("fucai").SQLCompute("Sun(结余) + Sum(入库数量) - Sum(出库数量)","[_SortKey] < " & e.DataRow("_SortKey"))
            e.DataRow("总库存") = e.DataRow("结余") + e.DataRow("入库数量") - e.DataRow("出库数量") + jc
            dr = e.DataRow
        End If
        drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey"), "[_SortKey]")
        For i As Integer = 1 To drs.Count - 1 '重算余下行的余额,注意i是从1开始遍历的.
            drs(i)("总库存") = drs(i-1)("总库存") + drs(i)("入库数量") - drs(i)("出库数量") + drs(i)("结余")
        Next
End Select

 

3、表事件AfterMoveRow的代码保持不变:

   Dim Key As Decimal
   Dim
Index As Integer
   Dim
dc As DataCol
   Index = Math.Min(e.OldIndex, e.NewIndex)
   Key = e.
Table.Rows(Index)("_SortKey")
   dc = e.
Table.DataTable.DataCols("入库数量")
   dc.RaiseDataColChanged(
"[_SortKey] >= "
& Key)

4、表事件DataRowDeleting的代码同样保持不变:

   e.DataRow("入库数量") = 0
   e.
DataRow("出库数量") = 0

5、最后AfterOpenproject事件代码设置为:(分页加载这里我用的是自定义的加载树,按条件加载的,这样对下面的代码有影响吗?)

With DataTables("fucai")
    .LoadOver = "_SortKey" '设置分页加载依据列
    .LoadFilter = "" '清除加载条件
End With



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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/5/27 9:13:00 [只看该作者]

出现什么问题吗?

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/27 9:14:00 [只看该作者]

 把例子传上来。

 

 你只有修改了 结余 列,才会计算总库存的,表达式列不会触发 DataColChanged。表达式列如果要触发DataColChanged,看这里 http://www.foxtable.com/help/topics/2381.htm

 


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


加好友 发短信
等级:一尾狐 帖子:459 积分:3137 威望:0 精华:0 注册:2014/2/13 9:22:00
  发帖心情 Post By:2014/5/27 9:44:00 [只看该作者]

为什么我的外部数据源上传不上来呢。mdb格式的,提示文件类型不正确!!


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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/5/27 9:47:00 [只看该作者]

压缩打包文件.

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


加好友 发短信
等级:一尾狐 帖子:459 积分:3137 威望:0 精华:0 注册:2014/2/13 9:22:00
  发帖心情 Post By:2014/5/27 11:01:00 [只看该作者]

 

例子已经上传,请老师帮忙做下具体的代码,改了一上午了,问题还是没解决。

目前开发遇到的问题如下:

1. 我的辅材出库界面已经录了1000多行,如果数据量再大的话,启动速度会慢,如果不全部加载数据的话,那主表

总库存统计的数量就不准确。所以要采用分页加载与流水账的形式来做,甜老师说是表达式列无法触发datacolchanged事件,

所以代码就不知道改如何修改了。

请老师麻烦些,帮我实现这个例子,因为我有好个表都存在这样的问题,都需要修改。谢谢老师了!!

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:分页加载与流水账例子.rar

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


加好友 发短信
等级:一尾狐 帖子:459 积分:3137 威望:0 精华:0 注册:2014/2/13 9:22:00
  发帖心情 Post By:2014/5/27 11:02:00 [只看该作者]

超过2M传不上来,所以删了好多东西!

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/5/27 11:34:00 [只看该作者]

你做个例子发上来吧,项目打开就报错.而且东西多有点乱.



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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/27 11:37:00 [只看该作者]

 看了一下,不明白你为什么要做流水账?明明直接统计即可的。

 

1、删除结余列,入库数量和出库数量改成数据列

 

2、编写datacolchanged的代码

 

Select Case e.DataCol.Name
    Case "辅材编号"
        Dim filter As String = "辅材编号 = '" & e.DataRow("辅材编号") & "'"
        e.DataRow("入库数量") = DataTables("fucairuku").SQLCompute("sum(入库数量)", filter)
        e.DataRow("出库数量") = DataTables("fucairuku").SQLCompute("sum(出库数量)", filter)
        e.DataRow("库存总量") = e.DataRow("入库数量") - e.DataRow("出库数量")
End Select


 回到顶部
帅哥哟,离线,有人找我吗?
身份不明
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:459 积分:3137 威望:0 精华:0 注册:2014/2/13 9:22:00
  发帖心情 Post By:2014/5/27 11:47:00 [只看该作者]

明白了,甜老师,绕了个弯路。可以不删除结余列统计吗?


 回到顶部
总数 28 1 2 3 下一页