• 设置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.
     

  • 相关阅读:
    使用Boost::ptime构建高精度计时器
    static和extern
    通用js地址选择器
    js模拟抛出球运动
    前端用Webpact打包React后端Node+Express实现简单留言版
    webpack 打包一个简单react组件
    img及父元素(容器)实现类似css3中的background-size:contain / background-size:cover
    通用js函数集锦<来源于网络> 【二】
    通用js函数集锦<来源于网络/自己> 【一】
    向上滚动或者向下滚动分页异步加载数据(Ajax + lazyload)[上拉加载组件]
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/2940899.html
Copyright © 2020-2023  润新知