设置dbgrideh的footer

{*******************************************************}
{                                                       }
{       设置footer                                      }
{                                                       }
{       版权所有 (C) 2007 咏南工作室(陈新光)          }
{                                                       }
{*******************************************************}

//==============================================================================
// 取得FOOTER的合计值pDbGrid.Columns[1].Footer.SumValue
// 比如要将金额转换成中文大写
//==============================================================================

unit uFooter;

interface

uses
  SysUtils,Graphics,Classes,DBGridEh;

//==============================================================================
// AFlag=1记录数
// AFlag=2合计
// AFlag=3两者都要
//==============================================================================

Procedure SetDbGridEhFoot(pDbGrid:TDBGridEh; pcFields: string;AFlag:Integer=3);

implementation

//------------------------------------------------------------------------------
// 功能:将指定分隔符分隔的字符串转换为字符串列表。
//             此函数在需要将
// 参数:
//             pcString : string; 字符串
//             pcChar   : string; 分隔符
//             pDesList :  TStringList   字符串列表
// 例如:
//  var tmpFldList : TStrings ;
//  begin
//      tmpFldList := TStringList.Create ;
//      StrToStringList(  Uppercase(pcFields), ',' , tmpFldList  );
//      ......
//      tmpFldList.Free ;
//  end;
//------------------------------------------------------------------------------

Procedure StrToStringList( pcString,pcChar:string;pDesList:TStringList );
var
  cAddStr,cSrcStr : string ;
  nPos : integer ;
begin
  pDesList.Clear ;

  cSrcStr := pcString ;
  while True do
  begin
     nPos := pos( pcChar, cSrcStr );
     if nPos = 0 then begin
        pDesList.Add( cSrcStr ) ;
        Exit ;
     end
     else begin
        cAddStr := copy( cSrcStr,1, nPos - 1 );
        pDesList.Add( cAddStr ) ;
        Delete( cSrcStr,1, nPos + length( pcChar )-1 );
     end;
  end;
end;

//--------------------------------------------------------------------------------
// 功能:设定 DbGridEh 合计行信息
// 参数: pDbGrid:TDBGridEh;
//        pcFields : string ; 字段列表,字段用逗号分隔
//        pvtType : TFooterValueType ;统计类型 TFooterValueType = (fvtNon, fvtSum, fvtAvg, fvtCount, fvtFieldValue, fvtStaticText);
// 引用:StrToStringList
// 例如:DbGridEhFoot( DbGridEh1, 'Number,Sum', fvtSum ); 设定数量和金额字段为合计统计
// AFlag=1记录数
// AFlag=2合计
// AFlag=3两者都要
//--------------------------------------------------------------------------------
Procedure SetDbGridEhFoot(pDbGrid:TDBGridEh; pcFields: string;AFlag:Integer=3);
var
  nFldLoop: integer;
  cFieldName: string;
  tmpFldList: TStringList;
begin
  if pDbGrid.Columns.Count=1 then exit;  //只有一列的不设置FOOTER
  pDbGrid.SumList.Active:=true;
  if AFlag=1 then                     //记录数
  begin
    pDbGrid.FooterRowCount:=1;
    pDbGrid.Columns[0].Footer.ValueType:=fvtStaticText;
    pDbGrid.Columns[0].Footer.Value:='记录数';
    pDbGrid.Columns[1].Footer.ValueType:=fvtCount;
  end;
  if AFlag=2 then                    //合计
  begin
    pDbGrid.FooterRowCount:=1;
    pDbGrid.Columns[0].Footer.ValueType:=fvtStaticText;
    pDbGrid.Columns[0].Footer.Value:='合计';
    tmpFldList:=TStringList.Create;
    try
      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:=fvtSum;
        end;
      end;
    finally
      FreeAndNil(tmpFldList);
    end;
  end;
  if AFlag=3 then                    //两者
  begin
    pDbGrid.FooterRowCount:=2;
    pDbGrid.Columns[0].Footers.Insert(0);
    pDbGrid.Columns[0].Footers.Insert(1);
    pDbGrid.Columns[0].Footers[0].ValueType:=fvtStaticText;
    pDbGrid.Columns[0].Footers[0].Value:='记录数';
    pDbGrid.Columns[0].Footers[1].ValueType:=fvtStaticText;
    pDbGrid.Columns[0].Footers[1].Value:='合计';
    pDbGrid.Columns[1].Footers.Insert(0);
    pDbGrid.Columns[1].Footers[0].ValueType:=fvtCount;
    tmpFldList:=TStringList.Create;
    try
      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].Footers.Insert(0);
          pDbGrid.Columns[nFldLoop].Footers.Insert(1);
          pDbGrid.Columns[nFldLoop].Footers[1].ValueType:=fvtSum;
        end;
      end;
    finally
      FreeAndNil(tmpFldList);
    end;
  end;
end;

end.
 

原文地址:https://www.cnblogs.com/hnxxcxg/p/2940899.html