用这种方法有以下几个方面要注意:
1、QuickReport控件不能连DataSet
2、显示明细数据的QrLabel放在DetailBand里
3、注意循环变量的赋值,比如换页后,页中当前行的值必须初始化
4、控件MoreData,为True时继续打印,为False不继续打印
下面我举个例子:
implementation
var
PageRowCount : Integer;
//每页能打印的总行数
CurrentRow : Integer;
//页中当前打印的行号
I : Integer;
//数组中用到的循环变量
{$R *.DFM}
{打印之前,对数据进行初始化}
procedure TForm1.QuickRep1BeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
begin
PageRowCount := 20;
//这个值要注意,不能太大,也不能太小
CurrentRow := 0;
I := 0;
end;
procedure TForm1.QuickRep1NeedData(Sender: TObject;
var MoreData: Boolean);
begin
//如果数据打印完成,不继续进行
if I = High(MyArray) then
begin
MoreData := False;
//不继续打印
Exit;
end;
MoreData := True;
//继续打印
{如果一页打满,换页继续打印}
if CurrentRow = PageRowCount then
begin
QuickRep1.NewPage;
//开始新页
CurrentRow := 0;
//对当前行变量初始化
end
else
{一页没打满,继续打印该页内容}
begin
QRLabel1.Caption := MyArray[0, I];
{打印第一项内容}
QRLabel2.Caption := MyArray[1, I];
{打印第二项内容}
// .....
end;
Inc(I);
//控制数组变量+1
Inc(CurrentRow);
//对当前行变量+1
end;