QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2269|回复: 0
打印 上一主题 下一主题

QuickReport基本知识

[复制链接]
字体大小: 正常 放大
韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 12:33 |只看该作者 |倒序浏览
|招呼Ta 关注Ta

一、 简单了解各控件功能 / P' Q/ ~1 w% j) A) u7 g 以下是各控件最简单的使用功能,其他功能依具体的实现而介绍。 & ^& M. n( q, J& n* K# C I 1. TquickRep:带有坐标,作为其他报表控件(如TQRBand)的容器,它的Band属性可以自动添加各种类型的TQRBand. + z/ [$ z2 O7 A/ U, @3 Y 2. TQRLabel:打印静态的文本(即不是根据数据库值来改变的),作用象Tlabel , Caption的内容就打印出来的内容。 7 U; |( x" g; h T' y& c* o0 X$ | 3. TQRDBText:打印数据库字段值,一个值一行。作用象TDBText.把它的DataSet , DataField分别赋予Table1,Company时,将打印Table1所指向的表的Company字段的内容。 0 V. y' v, e' a/ s. Q6 S6 B1 t 4. TQRSysData:打印系统信息如时间,页码,报表头等。 ) P8 a: Q. D3 n# Q+ y 5. TQRMem非常象TQRLabel,只是它可以打印多行,也是打印静态数据。 1 v* x' ?; Z, L1 y, g$ s5 @ 6. TQRRichText:打印RichText格式,能够连接到一个Form上的RichEdit控件并打印它的内容,不过必须是32位版本的。 N6 B0 l4 n I7 N/ u; w7 g 7. TQRShape:打印方框、圆和垂直、水平线。 h# L$ B. J6 V; ?* }8 R0 [ 8. TQRImage:打印静态的图片,包括(BMP,WMF,ICON). ! Q. U6 s4 M) _3 G5 R3 U 9. TQRDBImage:从数据库接收图片。 , e4 q- w# s' B6 C 10. TQRBand:用来确定报表的不同位置应该显示什么内容,它上面可以放控件(参见二)。 $ }% t7 Q" D4 v- X1 n/ v3 ]/ W }# P 11.TQRGoups:Groups可以不限级别的组操作。当你连接了几个datasets到报表时可以通过Groups成组的对dataset进行操作。

w5 h* C- \$ P9 P+ }

二、 报表的控件摆放循序

; v5 b3 _) E4 P$ p, A6 K8 \

出现在所有页上的标题(PageHeader) , f1 V; V4 S2 Y# ~6 Z# x5 [# J, k& o | ; r2 y: |- d8 U/ a$ A/ X 标题(只有首页才有)(Title) 0 ?- H( c( V3 I9 N3 s* | | 8 R' s( q m1 `' }& f0 h& ?$ C' R 所有列的标题(ColumnHeader) 3 w' d8 X& Z% }+ s$ y | 4 y! f8 j, e! U' f 记录的内容,一个字段一列(Detail) 9 l9 L5 N/ P( G; E. }0 f: ~ | 9 Y: l5 i3 W7 E& W3 q 摘要(最后一页才有)(Summary) 9 R+ i& I; _3 h* X5 W/ Y | 7 p$ N1 t; r: X 出现在所有页上的页脚(PageFooter) ?* P- S8 p8 }/ R1 L : H* `# J% ]' J) g2 i) ]( p 这些根据设置不同的Band(不是控件,一种类型而已,在其上面可以放其他控件)来定位。总共有六种Band。

4 D0 M1 n! V7 \6 Z7 V/ ?7 _! I1 [! L

三、 一个简单的例子 - Y: |5 ~$ b/ U' q$ X; c+ | 这个例子制作打印一张表的部分字段名及该字段数据内容的报表。 ( s3 y1 l* A' p4 P; |( a 1. 建立一个新project 3 G+ L$ P# s6 l# m 2. 放一个TTable到Form上,DatabaseName设为BCDEMOS,TableName指向Customer表,Active设为true. - M# z" t* }7 g6 c$ l, } 3. 放一个TquickRep控件在Form上,DataSet属性为Table1.(即要显示上边Table1所指向的表的内)。 . U r0 {' r; A2 ?& c- U7 Q" k 4.展开TquickRep的Bands属性,设HasDetail为true,这时自动增加个detail band(一个TQRBand控件,故也可以直接放一个TQRBand控件,BandType属性设为detail就行了)。 ! s' G( l3 c) I; l$ i, k 5.放一个TQRDBText控件在detail band上面,设DataSet指向Table1,DataField指向Company。第四步是设置在报表的什么位置显示什么类型的数据,而TQRDBText则具体实现。 7 o; k/ ^9 A* b" I" v5 U7 \' } 6.选TquickRep控件,按右键,选择”Preview”预览,应该看到表Customer的字段Company的所有字段值。 ( k/ A- J& s3 m+ f7 A( n, v/ G! y 到这一个简单的例子就OK了,程序实现预览及利用TQRuickRep自带的打印功能只须在Form中加一个按钮,它的OnClick事件为:QuickRep1->review();

9 L8 Q5 ]* c$ {3 K1 y: z" f# Q

四、 一个使用TQRGoups、TQRExpr控件的报表 9 {6 H, U. y- U7 a. j 该报表先列出州名,接着列出该州的所有公司及公司总数,一个州列完后空一行(groups中断),列出新的州名,接着列新州下的所有公司,没有填州名的公司统一列在Unknown state下面。 / y" l2 e+ D+ M3 I 1. 建立一个新project。 1 d. @, O( M0 ?0 S 2. 放一个Tquery在Tquickrep上,其SQL属性为:select * from customer order by State,Company;(即根据州、公司排序),DatabaseName为BCDMome,Active为true. " @( @, z1 ^0 S. e' M" [, g2 _ 3. 放一个TquickRep控件在Form1上,DataSet为Tquery1. ( `; A" O' r$ H e1 R/ p& q/ l6 N9 C 4. 放一个TQRGroups控件在TquickRep上,这时默认为group header。(任何时候当group中断或更高级别的group中断,这个header都将打印出来,如果有表达式,根据表达式的值显示内容。)接着添加一个group footer band,添加时,放一个TQRBand控件在报表上,连接TQRGroups的FooterBand属性到这个QRBand,这时这个新建的TQRBand就成为Group Footer. (TQRGroup的一个重要特性是表达式,任何时候当表达式的值变时Group都将中断,如表达式是按省列出城市名,当前列出广东省,当属于该省的城市列完后,表达式值改变,这时Group中断,接着显示其他省的城市名。)TQRGroups的Expression属性设为Query1.State(根据不同的州来中断)。 " b9 ?$ Z2 I- O: X 5. 放一个TQRBand控件在报表上,BandType为rbDetail. 8 X7 g; G/ q# }2 `/ B+ i 6.放一个TQRExpr控件在group header上面,其Expression属性为:if(State<>’’,State,’Unknown state’),即如果公司的州没填,就归入Unknown state,否则归入State. % o6 e4 H& ]# w# c& B4 S 7.放三个TQRDBText在Detail上,他们的DataSet都指向Query1,DataField分别指向Company,Contact,Phone. , `4 ]: O0 j8 R. N8 W k 8.在放一个TQRExpr控件在group Footer上面,Expression为’Customers in’+State+’:’+Str(Count) 作用是在每个州的公司列完后显示该州总共有多少个公司。 - ~$ a8 ?0 Y: C5 x" S: [ 9.按右键选预览,应该看到不同的州名及其公司和公司公司总数。

* @8 n0 ?8 a- f4 v3 s+ A

五、QuickReport 条件式列印 9 h) _0 j; A' `- ]( | 可以直接在 TQuickReport 的 OnFilter 事件中写明条件判断,OnFilter事件的引数中有一个以 var 宣告的 PrintRecord 布林型态变数,将这个变数设为 True(预设值), 该笔记录便会印出;反之, 设为False,就不印出这笔记录. # C( l0 ?" j6 r1 L procedure TForm1.QuickReport1Filter(var PrintRecord: Boolean); " e/ V* {' ~# d5 m7 ]5 q, ]) M begin ( [$ c, R! r8 q5 o4 V+ r+ u, v PrintRecord := False; 0 q E9 T, W! O$ Q8 m1 Z if YourTable.FieldByName('WantedField').AsInteger <= 100 then ; ~* `9 b4 y- e Exit; ! \; ?% ^' [: J: L! ^ if YourTable.FieldByName('WantedField').AsInteger >= 150 then # g5 n5 D D' o7 F' D! @% x; ] Exit; 8 x! _) h) L4 S) c0 P PrintRecord := True; ( @/ v+ ?. O* A5 ?$ n/ r* w& ] z# L

zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-8-10 13:32 , Processed in 2.360924 second(s), 51 queries .

回顶部