有三種方法可以達到你的效果
1.臨時表
2.設置QuickRep的DataSet=nil,在OnNeedData中寫代碼控製記錄移動
3.增加一個StringBand,在StringBand的Items中隨便加入一些字串,字串行數為你的空白欄位然后在
DetailBand中控製是否打印StringBand
現提供我寫的第三種方法供大家參考:
unit BasePrnitUnit;
interface
uses
Controls, Forms,
ExtCtrls, QuickRpt, Qrctrls,QRPrntr,ADODB, Classes;
type
TBasePrnitForm = class(TForm)
QuickRep: TQuickRep;
DetailBand: TQRBand;
PageHeaderBand: TQRBand;
PageFooterBand: TQRBand;
QRTitle: TQRLabel;
QRPageNum: TQRLabel;
QRSysData1: TQRSysData;
QRStringsBand: TQRStringsBand;
QRUser_nam: TQRLabel;
procedure QuickRepPreview(Sender: TObject);
procedure PageFooterBandBeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
procedure FormCreate(Sender: TObject);
procedure QuickRepBeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
procedure QRStringsBandBeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
procedure QRStringsBandAfterPrint(Sender: TQRCustomBand;
BandPrinted: Boolean);
procedure DetailBandBeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
private
public
FMDat:TADOQuery;
FDDat:TADOQuery;//保存明細邊條數據集
PageLineNum:Integer;//每頁行數
TotalPage:Integer;//總記頁數
Procedure SetTitle(Title:String);
//設置標題
Procedure DataInit(MD,DD:TADOQuery);
//初始化QuickRep數據集
procedure SetBandDataSet(Band:TQRBand;DataSet:TADOQuery);
//設置TBand數據集
Procedure SetChildBandDataSet(ChildBand:TQRChildBand;DataSet:TADOQuery);
Procedure SetPageNum(Num:Integer);
//設置頁號
//請不要在QuickReP中用TQRExpr組件
end;
implementation
uses PreviewForm,SysUtils;
Var
SpaceLineNum,CurrRecord:Integer;
{$R *.DFM}
Procedure TBasePrnitForm.SetPageNum(Num:Integer);
begin
TotalPage:=Num;
end;
procedure TBasePrnitForm.SetBandDataSet(Band:TQRBand;DataSet:TADOQuery);
var
i:integer;
begin
For i:=0 to Band.ControlCount-1do
If Band.Controls is TQRDBText then
(Band.Controls As TQRDBText).DataSet:=DataSet;
end;
procedure TBasePrnitForm.DataInit(MD,DD:TADOQuery);
begin
FMDat:=MD;
FDDat:=DD;
QuickRep.DataSet:=FDDat;
//設置報表數據集
SetBandDataSet(DetailBand,FDDat);
end;
Procedure TBasePrnitForm.SetTitle(Title:String);
begin
QRTitle.Caption:=Title;
QRTitle.Left:=Round((PageHeaderBand.Width-QRTitle.Width) Div 2);
end;
procedure TBasePrnitForm.QuickRepPreview(Sender: TObject);
var
vwForm:TPreviewForm;
begin
vwForm:=TPreviewForm.Create(Application);
vwForm.QRPreview.QRPrinter:=TQRPrinter(Sender);
vwForm.QRTotal.Caption:=Format(vwForm.QRTotal.Caption,[totalPage]);
vwForm.ShowModal;
end;
procedure TBasePrnitForm.PageFooterBandBeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
begin
QRPageNum.Caption:=Format('第%d頁 共%d頁',[QuickRep.PageNumber,totalPage]);
end;
procedure TBasePrnitForm.FormCreate(Sender: TObject);
begin
PageLineNum:=0;
end;
procedure TBasePrnitForm.QuickRepBeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
var
i:integer;
begin
If PageLineNum>0 then
begin
If QuickRep.DataSet.RecordCount=0 then
SpaceLineNum:=PageLineNum
else
If QuickRep.DataSet.RecordCount mod PageLineNum=0 then
SpaceLineNum:=0
else
SpaceLineNum:=PageLineNum-QuickRep.DataSet.RecordCount mod PageLineNum;
QRStringsBand.Items.Clear;
i:=1;
While SpaceLineNum>=ido
begin
QRStringsBand.Items.Add('Print');
Inc(i);
end;
CurrRecord:=0;
end;
end;
procedure TBasePrnitForm.QRStringsBandBeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
begin
If (CurrRecord>=QuickRep.DataSet.RecordCount) And (SpaceLineNum>0) then
PrintBand:=True
else
PrintBand:=False;
end;
procedure TBasePrnitForm.QRStringsBandAfterPrint(Sender: TQRCustomBand;
BandPrinted: Boolean);
begin
If BandPrinted then
Dec(SpaceLineNum);
end;
procedure TBasePrnitForm.DetailBandBeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
begin
Inc(CurrRecord);
end;
procedure TBasePrnitForm.SetChildBandDataSet(ChildBand: TQRChildBand;Dataset:TAdoQuery);
var
i:Integer;
begin
For i:=0 to ChildBand.ControlCount-1do
If ChildBand.Controls is TQRDBText then
(ChildBand.Controls As TQRDBText).DataSet:=Dataset;
end;
end.