procedure Taaa.QuickRep1BeforePrint(Sender: TCustomQuickRep; var PrintReport: Boolean); begin Compensate(QRStringsBand1,jtkjfzxmDM.pswyCD,12); PrintReport:=true; end; procedure Compensate(ABand:TQRStringsBand;Adataset:Tdataset;Num:integer); var i:integer; begin i:=Num-Adataset.RecordCount; // showmessage(inttostr(i)); if i<=1 then Exit; //不必做补足 DupBand(ABand,i); end; procedure DupBand(ABand:TQRStringsBand;BandsNum:integer); var sl:TStringList; i:integer; begin sl:=TStringList.Create; for i:=1 to BandsNum do sl.Add(' '); ABand.Items:=sl; end; 这样做最好,你记得要在TQRStringsBand上画好线。TQRStringsBand要接在QRSubDetail1后面。
数据部份用QRSubDetail而非QRBand控件,尔后在QRSubDetail的OnNeedData事件中判断数据库Eof属性和报表有没有满页时,若不满页仍然使MoreData:=True,直到满页。
(注:判断报表是否满页用QuickReport的属性RecordNumber和RecordCount.)
若有不明之处,请Email联系。
Email:[email protected]
说得对,临时表确实是个好方法,但若类似报表比较多,临时表岂非太麻烦了?
var PrintReport: Boolean);
begin
Compensate(QRStringsBand1,jtkjfzxmDM.pswyCD,12);
PrintReport:=true;
end;
procedure Compensate(ABand:TQRStringsBand;Adataset:Tdataset;Num:integer);
var i:integer;
begin
i:=Num-Adataset.RecordCount;
// showmessage(inttostr(i));
if i<=1 then Exit; //不必做补足
DupBand(ABand,i);
end;
procedure DupBand(ABand:TQRStringsBand;BandsNum:integer);
var sl:TStringList;
i:integer;
begin
sl:=TStringList.Create;
for i:=1 to BandsNum do
sl.Add(' ');
ABand.Items:=sl;
end;
这样做最好,你记得要在TQRStringsBand上画好线。TQRStringsBand要接在QRSubDetail1后面。
指的是全部打算打12行,如果jtkjfzxmDM.pswyCD(这是从我的代码里抄出来的table)里的记录不足12条就用TQRStringsBand来补足。
可以把下面两个过程单独拿出来,因此每次只需写上面第一个过程就行了。
给我分吧!!!!!