如何把dbgrideh中的某几列的所有行作一个统计(只要累加就好),在最后一行中显示出统计数据

解决方案 »

  1.   

    我的方法是这样的:
    先找一个排序字段,确保结果排序正确,例如:IDNO<---自动加一的字段;然后开始写.
    select a,b,c,d from (
    SELECT A,B,C,D,IDNO FROM TAB
    UNION
    SELECT '' AS A,'合计:' AS B,SUM(C) AS C,SUM(D) AS D,999999 as idno from tab ) as aaa order by aaa.idno
    我把IDNO的值给得相当大,确保它排到后面去.
    就成了
      

  2.   

    这样不行吧,能不能在dbgrideh控件上做文章
      

  3.   

    首先来说,我就是这样做的.系统已经运行很久了.可以肯定行.我不喜欢在dbgrideh控件上做文章.
    :-)
      

  4.   

    做个虚拟字段用于几列的横向求和,然后用dbgrideh用的统计功能进行竖向求和`~
      

  5.   

    我知道dbgrideh有竖向统计功能,帮我看一下这段语句,Procedure DbGridEhFoot( pDbGrid:TDBGridEh; pcFields: string; pvtType : TFooterValueType );
    var nFldLoop : integer ;
        cFieldName : string ;
        tmpFldList : TStrings ;
    begin
      pDbGrid.FooterRowCount := 1;    // 指定网格尾部统计行行数
      pDbGrid.SumList.Active := true;   // 激活统计
      pDbGrid.FooterColor    := clBtnFace ;  // 指定统计行颜色  tmpFldList := TStringList.Create ;
      StrToStringList( Uppercase(pcFields),',',tmpFldList );  // 将字符串转换为串列表  For nFldLoop := 0 to pDbGrid.Columns.Count -1 do
      begin
          cFieldName := pDbGrid.Columns[nFldLoop].FieldName ;  // 网格列字段名
          if tmpFldList.IndexOf( uppercase( cFieldName ) ) >= 0 then
          begin
             pDbGrid.Columns[nFldLoop].Footer.ValueType := pvtType ;  // 统计类型
          end;
      end ;
      tmpFldList.Free ;
    end;----------------------------------------------------------------------------------
      StrToStringList( Uppercase(pcFields),',',tmpFldList );  // 将字符串转换为串列表
    -----------------------------------------------------------------------------------
    上面这条语句出错了,不知道是哪里的问题
      

  6.   

    只要设置,无须写代码~~
    将dbgrideh 的FoolTerRowCount设为1,在每列Footer集合下设置FileName,ValueType(计算类型)
    再将SumList 中Active设为True 表格会自动进行计算你所选择的计算类型!