关于Dbgrid的打印问题 ( 积分: 50 )

  • 主题发起人 主题发起人 enetyou
  • 开始时间 开始时间
E

enetyou

Unregistered / Unconfirmed
GUEST, unregistred user!
我用Ado查询出来的数据存放在DbGrid中,请问如何把这些数据打印出来呢?我有个设想如下:把查询出来的数据加入到quickrep中,然后再打印,但不知道该如何生成和传送数据,哪位大侠指点一下?最好能写到一个buttonclick的事件中,在该事件发生后,就动态生成了一个quickrep(不知道如何动态生成),然后显示出了指定的DbGrid中的数据,哪位大侠啊,指点一下吧!55555555555555555555,不想使用第三方控件了!
 
我用Ado查询出来的数据存放在DbGrid中,请问如何把这些数据打印出来呢?我有个设想如下:把查询出来的数据加入到quickrep中,然后再打印,但不知道该如何生成和传送数据,哪位大侠指点一下?最好能写到一个buttonclick的事件中,在该事件发生后,就动态生成了一个quickrep(不知道如何动态生成),然后显示出了指定的DbGrid中的数据,哪位大侠啊,指点一下吧!55555555555555555555,不想使用第三方控件了!
 
Delphi有现成的Demo,你去看看就知道了!
具体的,我也不是很清楚,因为很长时间没有用Quickrep了
 
直接打印DBGrid的内容
uses
DBGrids, QuickRpt, DB, Qrctrls,qrprntr,printers;
procedure PrintDBGrid(DBGrid: TDBGrid;
pTitle: string);
const
VER_MSG = '显示信息';
VG_UnitName='公司名称';
var
aReport: TQuickRep;
i, aLeft: integer;
PageHeaderBand1: TQRBand;
ColumnHeaderBand1: TQRBand;
DetailBand1: TQRBand;
PageFooterBand1: TQRBand;
oldBmk: TBookMark;
begin
if not DBGrid.DataSource.DataSet.Active then
begin
ShowMessage('数据集没有打开!');
Exit;
end;

oldBmk := DBGrid.DataSource.DataSet.GetBookmark;
DBGrid.DataSource.DataSet.First;
aReport := TQuickRep.Create(nil);
PageHeaderBand1 := aReport.CreateBand(rbPageHeader);
ColumnHeaderBand1 := aReport.CreateBand(rbColumnHeader);
DetailBand1 := aReport.CreateBand(rbDetail);
PageFooterBand1 := aReport.CreateBand(rbPageFooter);
aReport.DataSet := DBGrid.DataSource.DataSet;
aReport.Font := DBGrid.Font;
DetailBand1.Height := 27;
with TQRLabel(PageHeaderBand1.AddPrintable(TQRLabel))do
begin
Caption := pTitle;
Top := 10;
Left := 0;
Font.Style := [fsBold];
Font.Size := 14;
Width := 0;
end;

aLeft := 0;
for i := 0 to DBGrid.FieldCount - 1do
aLeft := aLeft + DBGrid.Columns.Width + 10;
if aLeft > 728 then
aReport.Page.Orientation := poLandscape
else
aReport.Page.Orientation := poPortrait;
with TQRShape(PageHeaderBand1.AddPrintable(TQRShape))do
begin
Top := 37;
Left := 0;
Height := 2;
pen.Width := 2;
Width := PageHeaderBand1.Width;
end;
with TQRShape(PageFooterBand1.AddPrintable(TQRShape))do
begin
Top := 2;
Left := 0;
Height := 1;
pen.Width := 1;
Width := PageFooterBand1.Width;
end;
with TQRLabel(PageHeaderBand1.AddPrintable(TQRLabel))do
begin
Font.Size := 8;
Caption := VG_UnitName;
Top := PageHeaderBand1.height - Height - 5;
Left := PageHeaderBand1.Width - length(VER_MSG) * Font.Size - 5;
end;
with TQRSysData(PageFooterBand1.AddPrintable(TQRSysData))do
begin
Data := qrsDateTime;
Top := 10;
Left := 0;
end;
with TQRLabel(PageFooterBand1.AddPrintable(TQRLabel))do
begin
Caption := '第';
Top := 10;
Left := PageFooterBand1.Width - 380;
end;
with TQRSysData(PageFooterBand1.AddPrintable(TQRSysData))do
begin
Data := qrsPageNumber;
Top := 10;
Left := PageFooterBand1.Width - 360;
end;
with TQRLabel(PageFooterBand1.AddPrintable(TQRLabel))do
begin
Caption := '页';
Top := 10;
Left := PageFooterBand1.Width - 300;
end;
with TQRLabel(PageFooterBand1.AddPrintable(TQRLabel))do
begin
Caption := '记录总数:';
Top := 10;
Left := PageFooterBand1.Width - 180;
end;
with TQRSysData(PageFooterBand1.AddPrintable(TQRSysData))do
begin
Data := qrsDetailCount;
Top := 10;
Left := PageFooterBand1.Width - 100;
end;

aLeft := 0;
for i := 0 to DBGrid.FieldCount - 1do
begin
if DBGrid.Columns.Visible = false then
continue;
if aLeft + DBGrid.Columns.Width > PageHeaderBand1.Width then
Break;
with TQRShape(ColumnHeaderBand1.AddPrintable(TQRShape))do
begin
Height := 1;
Top := ColumnHeaderBand1.Height - 5;
Left := aLeft;
Width := DBGrid.Columns.Width;
end;

with TQRLabel(ColumnHeaderBand1.AddPrintable(TQRLabel))do
begin
AutoSize := false;
Width := DBGrid.Columns.Width;
Caption := DBGrid.Columns.Title.Caption;
Alignment := taCenter;
Top := 10;
Left := aLeft;
end;

with TQRDBText(DetailBand1.AddPrintable(TQRDBText))do
begin
DataSet := DBGrid.DataSource.DataSet;
DataField := DBGrid.Columns.FieldName;
Alignment := DBGrid.Columns.Alignment;
Top := 5;
Left := aLeft;
AutoSize := False;
Width := DBGrid.Columns.Width;
end;

aLeft := aLeft + DBGrid.Columns.Width + 10;
end;

aReport.Preview;
ColumnHeaderBand1.Free;
DetailBand1.Free;
PageFooterBand1.Free;
PageHeaderBand1.Free;
aReport.Free;
DBGrid.DataSource.DataSet.GotoBookmark(oldBmk);
DBGrid.DataSource.DataSet.FreeBookmark(oldBmk);
end;
 
用AnyLib吧,自由界面和报表的完美解决方案!
http://www.anylib.com
 
多人接受答案了。
 
后退
顶部