2011-12-07

QuickReport 群組頁次

在Delphi彙整資料以QuickReport輸出時,
針對頁次與總頁數可以很簡單的列印上去,
在使用GroupBand時若要依據群組顯示頁次,如
1/1
------
1/2
2/2
------
可使用下面的方式來達到需求!
//**宣告全域變數
private
    xPage : Integer;
    xIONo : String;
    xRecIONo : String;

//**在PageHeader的BeforePrint寫入計算規則
procedure TQR.PageHeaderBandBeforePrint(Sender: TQRCustomBand;
  var PrintBand: Boolean);
var xPos,xLen : Integer;
      xStr : String;
begin
  //**Query_Item 為QR的DataSet
  if xIONo <> Query_Item.fieldbyname('IONo').AsString then
  begin
    //**"單號-總頁數" 兩群組記錄間以","分開
    if xIONo <> '' then
      xRecIONo := xRecIONo+','+xIONo+'-'+IntToStr(xPage);

    xPage := 0;//**頁次歸0
    xIONo := Query_Item.fieldbyname('IONo').AsString;
  end;

  INC(xPage);//**累加頁次
  QRL_SubPage.Caption := IntToStr(xPage);//**群組頁次

  if AnsiContainsStr(xRecIONo,xIONo) then//**產生preview前不需判斷
  begin
    //**"單號-總頁數"
    xStr := xRecIONo;
    xPos := Pos(xIONo,xStr);
    xLen := Length(xStr);

    //**拆單號-群祖頁數
    xStr := Copy(xStr,xPos+1,xLen-xPos);
    xPos := Pos(',',xStr);
    xStr := Copy(xStr,0,xPos-1);

    //**拆頁數
    xPos := Pos('-',xStr);
    xLen := Length(xStr);
    xStr := Copy(xStr,xPos+1,xLen);

    QRL_GroupPage.Caption := xStr;//**群組頁數
  end;
end;

//**在DataSet的EndOfRecordset寫入資料行結尾處理
procedure TQR.Query_ItemEndOfRecordset(DataSet: TCustomADODataSet;
  var MoreData: WordBool; var EventStatus: TEventStatus);
begin
  //**
  //**"單號-總頁數" 兩群組記錄間以","分開
  if xIONo <> '' then
    xRecIONo := xRecIONo+','+xIONo+'-'+IntToStr(xPage);

  xPage := 0;//**頁次歸0
  xIONo := '';
end;

沒有留言: