Buscar

Imprimir DBGrid usando QuickReport

Código

Vamos precisar da unit Report, abra o menu File|New Other e na guia New procure por Report

Na guia das vcls procure pelo QuickReport e coloque 3 bandas e 3 QRLABEL e 2 QRSysData:

1 - QRBAND1 - Na propriedade QRBandType escolha rbPageHeader
2 - QRBAND2 - Na propriedade QRBandType escolha rbColumnHeader
3 - QRBAND3 - Na propriedade QRBandType escolha rbDetail

1 - QRLABEL1 - Na propriedade Caption Coloque 'DATA'
1.1 - QRSysData1 - Na propriedade Data escolha qrsDate

2 - QRLABEL2 - Vai ser o título do seu relatório

3 - QRLABEL3 - Na propriedade Caption coloque 'PÁGINA Nº'
3.1 - QRSysData2 - Na propriedade Data escolha qrsPageNumber

Na seção Type crie a seguinte Class Procedure:

Type
public
Class procedure PrintDBGrid(ADBGRid :TExDBGrid ; Nome_Relatorio:string); // CTRL+C para implementar
end;

Na implementation:

class procedure TqrRelatorioPadrao.PrintDBGrid(ADBGRid: TExDBGrid; Nome_Relatorio: string);
var
i, posi: Integer;
col: TQRLabel;
fld: TQRDBText;
begin
posi := 0;
qrRelatorioPadrao := TqrRelatorioPadrao.Create(nil);
qrRelatorioPadrao.QRLabel2.Caption := Nome_Relatorio;
with qrRelatorioPadrao do
begin
DataSet := ADBGrid.DataSource.DataSet;
for i := 0 to Pred(ADBGrid.columns.Count) do
begin
// Cabeçalho das Colunas
col := TQRLabel.Create(qrRelatorioPadrao);
col.Parent := qrRelatorioPadrao.QRBand2;
col.Caption := ADBGrid.Columns[i].Title.Caption;
col.Top := 4;
col.Left := posi;
// Linhas de detalhes
fld := TQRDBText.Create(qrRelatorioPadrao);
fld.Parent := qrRelatorioPadrao.QRBand3;
fld.DataSet := DataSet;
fld.DataField := ADBGrid.Columns[i].Field.FieldName;
fld.Top := 4;
fld.Left := posi;
posi := posi + ADBGrid.Columns[i].Width + 25;
end;
Preview;
end;
end;

Observação como uso um componente de terceiros chamado ExDBGrid uso ele para fazer a conexão do DBGrid
com o Report. Você terá que mudar para o DBGrid normal do Delphi, caso não tenha esse componente.

Agora é só colocar essa unit na USES da unit (Interface) que você deseja usar.

Na var da unit que você vai usar a unit unQRRelatorioPadrao

unit unFAuditoria;

interface

uses unQRRelatorioPadrao;

type
private
{ Private declarations }
public
{ Public declarations }
end;

var
Relatorio: TqrRelatorioPadrao;

No evento onCreate da unit

procedure TfrmAuditoria.FormCreate(Sender: TObject);
begin
Relatorio := NIL;
Relatorio := TqrRelatorioPadrao.Create(NIL);
end;

E finalmente no evento onClick do botão imprimir

procedure TfrmAuditoria.SpeedButton3Click(Sender: TObject);
begin
Relatorio.PrintDBGrid(ExDBGrid1, 'AUDITORIA DE DADOS');
end;

Código completo da dica:

unit unQRRelatorioPadrao;

interface

uses Windows, SysUtils, Messages, Classes, Graphics, Controls,
StdCtrls, ExtCtrls, Forms, QuickRpt, QRCtrls, ExDBGrid;

type
TqrRelatorioPadrao = class(TQuickRep)
QRBand1: TQRBand; // rbPageHeader
QRBand2: TQRBand; // rbColumnHeader
QRBand3: TQRBand; // rbDetail
QRLabel1: TQRLabel; // "DATA"
QRLabel2: TQRLabel; // Título do Relatório
QRLabel3: TQRLabel; // "PÁGINA Nº"
QRSysData1: TQRSysData; // qrsDate
QRSysData2: TQRSysData; // qrsPageNumber
public
Class procedure PrintDBGrid(ADBGRid :TExDBGrid ; Nome_Relatorio:string);
end;

var
qrRelatorioPadrao: TqrRelatorioPadrao;

implementation

{$R *.DFM}

{ TqrRelatorioPadrao, criação dos componentes TQRLabel e TQRDBText dinamicamente }

class procedure TqrRelatorioPadrao.PrintDBGrid(ADBGRid: TExDBGrid; Nome_Relatorio: string);
var
i, posi: Integer;
col: TQRLabel;
fld: TQRDBText;
begin
posi := 0;
qrRelatorioPadrao := TqrRelatorioPadrao.Create(nil);
qrRelatorioPadrao.QRLabel2.Caption := Nome_Relatorio;
with qrRelatorioPadrao do
begin
DataSet := ADBGrid.DataSource.DataSet;
for i := 0 to Pred(ADBGrid.columns.Count) do
begin
// Cabeçalho das Colunas
col := TQRLabel.Create(qrRelatorioPadrao);
col.Parent := qrRelatorioPadrao.QRBand2;
col.Caption := ADBGrid.Columns[i].Title.Caption;
col.Top := 4;
col.Left := posi;
// Linhas de detalhes
fld := TQRDBText.Create(qrRelatorioPadrao);
fld.Parent := qrRelatorioPadrao.QRBand3;
fld.DataSet := DataSet;
fld.DataField := ADBGrid.Columns[i].Field.FieldName;
fld.Top := 4;
fld.Left := posi;
posi := posi + ADBGrid.Columns[i].Width + 25;
end;
Preview;
end;
end;

end.

   

Publicidade

Vote na dica




Quantidade de votos: 1 voto
Aceitação: 20%


Detalhes da dica

Categoria: Impressão
Adicionada dia: 16/07/09
Por: Herminio L. Paes Júnior
Visualizada: 16156 vezes

Planeta Delphi - Tudo sobre programação Delphi Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009