我的表格类似这样的数据:
用户编号  结算月份  使用费用  缴纳费用
001       200601     158        158
001       200602     481        300
001       200603     241        180
002       200601     470        500
002       200602     390        400
……………………现在我希望能在每个用户上(或每月上)统计一个“使用费总数”和“缴纳费总数”,如:
用户编号  结算月份  使用费用  缴纳费用
001       200601     158        158
001       200602     481        300
001       200603     241        180
001                  880        638      
002       200601     470        500
002       200602     390        400
002                  860        900            
……………………我希望由用户选择是按用户统计还是按月统计现在的问题是这样的:
1 我使用Subtotal 方法只能将统计的值显示在记录上面不能显示在记录底部
2 使用Subtotal方法定义统计行第一列的名字只能是个定值,不能象我希望的那样对应不同用户显示用户编号
3 我无法选择按月统计:
  按用户统计这样写可以
  VSFlexGrid1.Subtotal flexSTSum, 1, 3, , , vbRed, True, "统计"
  按月统计这样写就不行,它会每行统计一个值出来
  VSFlexGrid1.Subtotal flexSTSum, 2, 3, , , vbRed, True, "统计"
4 若能统计出“使用费总数”和“缴纳费总数”的差值就最好了问题解决马上结贴!

解决方案 »

  1.   

    这个控件应该没有那么现成的,还需要自己准备好在显示在 VSFlexGrid
      

  2.   

    VSFlexGrid一个问题都不能解决吗?不是说VSFlexGrid功能很强大吗?
      

  3.   

    建议直接通过 sql 查询语句来完成统计
      

  4.   

    给你个建议,去看看sql的compute语法,对你应该有帮助
      

  5.   

    我用的数据库是Access,好像不认Compute语句呢
      

  6.   

    没有一句就能搞定的事情,我们都是先统计然后写入VsFlexGrid表格中的行的
      

  7.   

    MultiTotals PropertyReturns or sets whether subtotals will be displayed in a single row when possible.Syntax[form!]VSFlexGrid.MultiTotals[ = {True | False} ]ResIf you set the MultiTotals property to True, then subtotal rows created by the Subtotal method may contain aggregate values for multiple columns. Otherwise, new subtotal rows are created for each aggregate value.The examples below show the difference:    fg.MultiTotals = True    fg.Subtotal flexSTClear    fg.Subtotal flexSTSum, 1, 2, , vbRed, vbWhite, True    fg.Subtotal flexSTSum, 1, 3, , vbRed, vbWhite, True     fg.MultiTotals = False    fg.Subtotal flexSTClear    fg.Subtotal flexSTSum, 1, 2, , vbRed, vbWhite, True    fg.Subtotal flexSTSum, 1, 3, , vbRed, vbWhite, TrueData TypeBooleanDefault ValueTrueSee AlsoVSFlexGrid Control
     
      

  8.   

    最后的两个字“统计”,你改成:“统计”& fg.Cell(flexcpText, row,col),row是统计的最后一行,可以是fg.row,col是指定列。这样出来就是"统计001"这样的效果了。至于MultiTotals 这只是一行显示多列统计数据。
    我的建议是根据用户的选择查询方式,而写不同的sql语句,重新填充表格,就循环写进去,也不会慢。太多就分页。
      

  9.   

    to xghim((︵-︵)) 
    谢谢你,统计显示提示的问题可以用你的方法,只是我很希望能直接操作记录集。to Lailuboy() 
    给点例子啊,我现在头痛,要改成不绑定,程序都要改,现在程序已经成型了,只是统计的时候出了这样的问题,如果不绑定,很多代码要重新写呢。
      

  10.   

    1、vsflexgrid1.SubtotalPosition = flexSTBelow 合计显示在下面
    2、如XGHIM所言
    3、vsflexgrid1.col=2 '结算月份那一列
       vsflexgrid1.Sort = flexSortGenericAscending '先将结算月份排序
       VSFlexGrid1.Subtotal flexSTSum, 2, 3, , , vbRed, True, "统计"
    4、需要做一个循环,用IsSubtotal 判断该行是否是合计行,如何是把两者之差显示出来。
      

  11.   

    fishyx(勇者无惧!我要上前线) ,你要的参考我已经发到你的邮箱了,如果是和他差不多的话我们再聊,代码的话,我只能给一核心给你参考,
      

  12.   

    to Lailuboy() 
    太对了,就这个意思,你的界面比我想想的还要漂亮。这是用VB和VsFlexGrid做的吗?
    给点代码吧。(流口水ing....)to wsyyq(巫山男儿)
    我按你的方法作了,为什么还是一行一结算?始终不能分组
    对于VsFlexGrid控件我作了下面的设定:VSFlexGrid1.AllowSelection = False
    VSFlexGrid1.SelectionMode = flexSelectionByRow
    '可以移动列的位置和列排序(要列排序,DataMode属性就不能绑定记录集)
    VSFlexGrid1.ExplorerBar = flexExSortShowAndMove
    '运行时可调整行,列的宽度
    VSFlexGrid1.AllowUserResizing = flexResizeBoth
    ' 超宽字符加省略号
    VSFlexGrid1.Ellipsis = flexEllipsisEnd
      

  13.   

    我的是VB+VsFlexGrid做的,不过我们是从记录集中取出记录,然后再循环控制写入的,没有采用绑定的方式。要更新的话都是在Grid的ValidateEdit事件中处理的。
      

  14.   

    to Lailuboy() 
    这样也可以的,给点代码吧,我觉得你们的界面作得很漂亮呢