在Delphi中运用QuickReport实现多栏列印


======================================================
注:本文源代码点此下载
======================================================

---- 在所有有关delphi的书籍中,都没有讲解如何实现一个打印项的多栏打印,而实现生活中往往有许多报表要求同一项目多栏打印,quickreport提供了报表打印一整套完整的解决方案,完全可以实现同一项目的多栏打印,技术关键是如何控制表中记录提取个数,如果在treport的dataset属性中选定一个table,那么quickreport每次打印详细列表(bandtype=rbdetail)属性的tqrband时,系统会自动取出一个记录供打印,并将表中的记录指针移到下一位,这样程序无法控制表中记录指针的移动,就无法实现多栏打印,只要程序不在treport的dataset属性选定任何表, quickreport便不会控制表记录的提取,quickreport特为其它类型数据打印提供了一个onneeddata事件,quickreport 每次打印详细列表(bandtype=rbdetail)属性的tqrband时,会触发这个事件,要求提供打印数据,如果程序在onneeddata事件中编写运用表中数据提供打印资料,便能实现多栏打印,现举例说明:

---- 现在要实现一个table1中name项两栏打印,在窗口上放tquickreport组件 quickreport1,并在上面放tband组件band1,将其bandtype属性改为detail,在tband 组件上并排放两个qrlabel组件qrlabel1和qrlabel2,在quickreport1的onneeddata事件中写如下代码:

procedure tform1.quickrep1needdata(sender:

tobject; var moredata: boolean);

var

i: integer;

begin

moredata := true;

for i:= 1 to 2 do

begin

if table1.eof then break;

case i of

1: qrlabel1.caption :=

table1.fieldbyname('name').asstring;

2: qrlabel2.caption :=

table1.fieldbyname('name').asstring;

end;

table1.next;

end;

if table1.eof then moredata := false;

end;

---- 为了保证打印或者打印预览开始时table1指针在第一条记录,在quickreport1的 beforeprint事件中写如下代码:

procedure tform1.quickrep1beforeprint

(sender: tcustomquickrep;

var printreport: boolean);

begin

table1.first;

end;

---- 这样程序调用quickrep1.preview或者quickrep1.print便能预览或者打印到一个关于 name的从左至右,从上到下的多栏报表。


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值