打印的字段多,用QRCompositeReport1实现联合,
1.一个QRCompositeReport1,三个QuickRep,每个QuickRep上有rbTitle,rbDetail和基本字段;第一个QuickRep还有rbColumnHeader,
相关:uses QuickRpt, QRExport, QRCtrls, QrPrntr;
rbSubDetail声明在上面四个Unit之中。
后面的QuickRep显示caption要设置rbTitle,不能用rbColumnHeader
代码:
var
iLeft,i,tleft,mleft,jleft,hleft,nleft : integer;
begin
if not Assigned(dbGrid1.DataSource) then Exit;
if not Assigned(dbGrid1.DataSource.DataSet) then Exit;
iLeft := 0;
tleft := 0;
jLeft := 150;
mleft := 0;
hLeft := 150;
nleft := 0;
for I := 0 to dbgrid1.Columns.Count-1 do
begin
if dbgrid1.Columns.Items[I].Visible then
begin
tLeft := iLeft + dbgrid1.Columns.Items[I].Width;
if tLeft <= ColumnHeaderBand2.ClientWidth then //1
begin
with TQRLabel.Create(ColumnHeaderBand2) do
begin
Parent := ColumnHeaderBand2;
Left := iLeft;
Width := dbgrid1.Columns.Items[I].Width;
Caption := dbgrid1.Columns.Items[I].Title.Caption;
Alignment := dbgrid1.Columns.Items[I].Title.Alignment;
Top := ColumnHeaderBand2.Height - 2 - height;
end;
//TQRDBText--------------------
with TQRDBText.Create(DetailBand2) do
begin
Parent := DetailBand2;
Left := ileft;
Width := dbgrid1.Columns.Items[I].Width;
iLeft := iLeft + Width; //
DataSet := dbgrid1.DataSource.DataSet;
DataField := dbgrid1.Columns.Items[i].FieldName;
Alignment := dbgrid1.Columns.Items[I].Title.Alignment;
Top := DetailBand2.Height - 2 - height;
end;
end
else begin //1
mLeft := jLeft + dbgrid1.Columns.Items[I].Width;
if mLeft <= ColumnHeaderBand3.ClientWidth then //2
begin
with TQRLabel.Create(ColumnHeaderBand3) do
begin
Parent := ColumnHeaderBand3;
Left := jLeft;
Width := dbgrid1.Columns.Items[I].Width;
Caption := dbgrid1.Columns.Items[I].Title.Caption;
Alignment := dbgrid1.Columns.Items[I].Title.Alignment;
Top := ColumnHeaderBand3.Height - 2 - height;
end;
//TQRDBText--------------------
with TQRDBText.Create(DetailBand3) do
begin
Parent := DetailBand3;
Left := jleft;
Width := dbgrid1.Columns.Items[I].Width;
jLeft := jLeft + Width; //
DataSet := dbgrid1.DataSource.DataSet;
DataField := dbgrid1.Columns.Items[i].FieldName;
Alignment := dbgrid1.Columns.Items[I].Title.Alignment;
Top := DetailBand3.Height - 2 - height;
end;
end
else begin
nLeft := hLeft + dbgrid1.Columns.Items[I].Width;
if nLeft <= ColumnHeaderBand4.ClientWidth then
begin
with TQRLabel.Create(ColumnHeaderBand4) do
begin
Parent := ColumnHeaderBand4;
Left := hLeft;
Width := dbgrid1.Columns.Items[I].Width;
Caption := dbgrid1.Columns.Items[I].Title.Caption;
Alignment := dbgrid1.Columns.Items[I].Title.Alignment;
Top := ColumnHeaderBand4.Height - 2 - height;
end;
//TQRDBText--------------------
with TQRDBText.Create(DetailBand4) do
begin
Parent := DetailBand4;
Left := hleft;
Width := dbgrid1.Columns.Items[I].Width;
hLeft := hLeft + Width; //
DataSet := dbgrid1.DataSource.DataSet;
DataField := dbgrid1.Columns.Items[i].FieldName;
Alignment := dbgrid1.Columns.Items[I].Title.Alignment;
Top := DetailBand4.Height - 2 - height;
end;
end
else break;
end;
end;
end
else continue;
end;
QRCompositeReport1.Prepare;
QRCompositeReport1.Preview;
//QuickRep2.Preview;
end;
在QuickRep1.SummaryBand1.AfterPrint中加上NewPage,第二份Preview的報表才會換頁.
procedure TFrm_gzgl_jsgz.QRCompositeReport1AddReports(Sender: TObject);
begin
QRCompositeReport1.Reports.Add(QuickRep2);
QRCompositeReport1.Reports.Add(QuickRep3);
QRCompositeReport1.Reports.Add(QuickRep4);
end;
procedure TFrm_gzgl_jsgz.SummaryBand3AfterPrint(Sender: TQRCustomBand;
BandPrinted: Boolean);
begin
QuickRep3.NewPage;
end;
procedure TFrm_gzgl_jsgz.SummaryBand2AfterPrint(Sender: TQRCustomBand;
BandPrinted: Boolean);
begin
QuickRep2.NewPage;
end;