打不死的心态活到老。

Rave报表介绍之二: 可视报表设计器

上一篇 / 下一篇  2007-08-17 14:56:58 / 个人分类:Delphi编程

$S:q,z;`{1B0http://www.delphifans.com/infoView/Article_132.html

0K]uE;_x0

"_1l0v;t]&i0可视报表设计器
8asd`sB*zZQ051Testing软件测试网A%^0@v-PiR7M U2m
Rave有自己的可视报表设计器,以自己的文件格式保存报表。这有一些优势,你可以把报表51Testing软件测试网@"`RYK$px
独立于应用程序之外,可独立进行升级,甚至可以通过网络进行更新,或者使用Nevrona的51Testing软件测试网HN%vH rNFx
Rave Report Server。当然,你也可以把报表保存为标准的DFM文件格式。
@[ as\zXUO9M0
$_2@%n#}s$hp0为了启动可视报表设计器,防止一个TRvProject部件在form上,这个TRvProject部件将是你51Testing软件测试网+p"W4xF*X1d1i
的应用程序和你即将要创建的报表的联系。 如果需要,可加一个TRvSystem部件到窗体上,51Testing软件测试网~w9YpJ ?i
通过设定RvProject的Engine属性与它挂接。RvSystem部件是作为一个通用的报告系统配置51Testing软件测试网noA)o X'y n#d
部件:可通过它设置将要使用的打印机,边界,页数等等。为了开始一个新的报表项目,双
j)t!G@#X~ Y)Y0RvProject部件,或者通过敏感菜单选择"Rave Visual Designer..." 。
GD a x'FI0
%f I2w7\5ap4J0一个Rave项目文件将可能由多个报表组成。通过全局页面(Global Pages)可以保存一些报表
%^Fs0U"`XuJ0间共享的品项。
/RgZ0dC8Z!K_3E0
#^6S#qP/T*L0如果一个属性从缺省值改变为特定值,在属性编辑器中会显示成粗体。51Testing软件测试网HV\"_H2? {0z
51Testing软件测试网DR&L)r IwsXr@a
当在可视报表设计器设计好报表后,返回到delphi的IDE中,改变RvProject部件的51Testing软件测试网HH6Zx#`bj
ProjectFile属性为你刚才完成并保存的报表文件名。为了运行报表,加一个调用RvProject
+N0oZ3M x+V0对象的Execute方法的过程即可。51Testing软件测试网#m6nk8V%ywR4i\

nUU6Mr cH0如果我们设计的报表项目中只有一个报表,我们仅仅调用RvProject.Execute即可。如果我51Testing软件测试网OdF!WG
们的报表项目中有多个报表,我们不得不在调用Execute前,调用SelectReport来选择特定51Testing软件测试网~&x8K.Ia)Ze
的报表,或者调用直接调用ExecuteReport方法。
)JxaMPzc\0eN6s051Testing软件测试网;Mh\cL4Fx
51Testing软件测试网lt`(aX.n^
与报表项目进行交互
n&Sb&@S gI*z]0
`2@'H2D&T ?qz!e/P0参数(Parameters)51Testing软件测试网Q$U f#OP-ZG

xG+^9q?2^0参数可以存在于报表项目,报表,报表页面这三个地方,可通过对应对象的parameters属性51Testing软件测试网]9y%V G%A~
进行设定。51Testing软件测试网@$~9mpV&}+s EN

0_ ^/g2^0P,oy0你仅能通过报表项目的对象树来选择报表项目和特定的报表。对于报表页面可以通过报表项
Nk;?M!n @/R1r0目的对象树或页面设计的标题来选择。
zo8r$}y%r6O%v5J051Testing软件测试网z/\2Zj8v#ZZ.G
51Testing软件测试网6LU})[u t"S;E[3d
参数可通过DataText部件来输出。在页面上加一个DataText组件,打开属性编辑器的
,b]*p^ta}1d0DataField属性。你能在此选择项目变量、参数、后初始化变量。51Testing软件测试网 EPmXQ J x

g ]5Mi,t7a8`0procedure TFormMain.btnExecuteClick(Sender: TObject);51Testing软件测试网+?g&h5xw B
begin
OmOv;I:|0RvProject.Open; //打开报表项目51Testing软件测试网'`1Xa+e!p"X6W
RvProject.SelectReport('ParametrizedReport',False); //通过报表名称选择特定的报表51Testing软件测试网 Z.uW ~;LMG
RvProject.SetParam('Name','Leonel'); //给特定参数设定值51Testing软件测试网 ti^JIj2Ir[
RvProject.Execute; //执行报表51Testing软件测试网}Pv;_,H3~F2q
RvProject.Close; //关闭报表项目
}&QR/V},gV0end;
6n1M/L%s9@ c;XtB051Testing软件测试网%x(z,|l{
51Testing软件测试网$]3b,u0a"@ G@7i
后初始化变量
2IX.qCN*J7j0
K#FX5K8U0W fr0后初始化变量是只有在报表已经被打印了才知道值的变量。比如页的总数(TotalPages)就是
Q+X+@#af@0后初始化变量,其使用方式类同于一般变量,也是通过DataTexts来打印的。51Testing软件测试网'x;C4O_y7W
51Testing软件测试网't8I%|+HA e
全局页面
3o9R)L*w0@ O.Y0如果有些报表的部分在两个或更多报表中是相同的公用的,你能把这些放置到全局页面中。
t7AI$B%?-f M0比如公司名称、日期和时间、当前页号和总页数等。我们需要每个报表都有这些东西,我们51Testing软件测试网*i$e\Z#a ?
应该怎么做?
;Q~ bJ'] R ?051Testing软件测试网 d:t;F)XF9D
首先,加一个全局页面到报表项目中。在这个页面中,加一个section组件。Sections组件51Testing软件测试网V'HBB yeI _
用于组件的逻辑分组。
0t$l4zxA5{Q;D0在section组件中加入我们想要共享的东西。51Testing软件测试网 y1w FI,|Q8l|X

(\Vg*U/^R;i0在特定报表的特定页,增加另一个section组件。设定该组件的Mirror属性为前面那个全局
pP(f x!K\!^0页面中的Section组件。你能看见全局页面中的Section组件及其包含的对象均被映射进来51Testing软件测试网JS2Ai D.kE
了。对于其它特定的页面,同法炮制,现在多个页面就可以共享一些组件了。
Z6b2LFQO0
gT&EW3kr)['G0
`U}%T1S#jNec051Testing软件测试网 lyrA-[+djER}|
条件打印51Testing软件测试网4E|5}p3LR
有时我们会根据特定的条件打印报表的特定部分。Rave对此提供了强劲的支持。我们可以根51Testing软件测试网"hh5\4} e)G!fpX)t
据字段值和参数的条件映射一些sections 。
sxn9bZw7u051Testing软件测试网|-` J2stdnZB)n+G
在新的一个页面中创建一个参数HeaderKind。 它可能的值为H0 (无页头), H1(第一种页51Testing软件测试网/K7@1~3tL&W V7N)g
头), H2 (第二种页头)。在全局页面中增加一个新的section组件,它具有第二种页头风格。51Testing软件测试网MdG }"k)B ma
51Testing软件测试网pT@@h'M
返回到ConditionalReport报告Page1的页面,加一个DataMirrorSection部件,设定它的51Testing软件测试网?(~~t4H;@ F
DataField字段为Param.HeaderKind。打开它的DataMirrors属性编辑器,增加两个Data
B*Nc*noR%t0Mirrors: 如果值是H1,将打印第一种页头;值是H2, 将打印第二种页头;因为值为H0并不匹
bT(Oan1NYo Q0配任何mirrors,将不打印页头。
+T7XFZ_;w051Testing软件测试网Jyd+M W+Evx7U TK
procedure TFormMain.btnExecuteClick(Sender: TObject);51Testing软件测试网JC/@ tT'h
begin
L+Wd-Q'K M$_q)]0RvProject.Open; //打开报表项目51Testing软件测试网1FPT ky }/bw.^
RvProject.SelectReport(cmbReports.Text,False); //通过报表名称选择特定的报表
_4rM*K5I8]C0case cmbReports.ItemIndex of
3wE4h _#XRa?m#~'kF01:RvProject.SetParam('Name',edName.Text); //给特定参数设定值
,GV?/p;T!t%\Xv!DM02:RvProject.SetParam('HeaderKind',Format('H%d',[cmbHeaderKind.ItemIndex])); //51Testing软件测试网z/tu ](_v
给特定参数设定值51Testing软件测试网ret#x(r5~6P(x/dL?
end;
D9^ s5W&Pw0RvProject.Execute; //执行报表51Testing软件测试网$]j+@0N,R{x(?
RvProject.Close; //关闭报表项目51Testing软件测试网3dACi.w[\$j
end;51Testing软件测试网 ~GNk5u"M2f

sK7q7]+jC0镶嵌报表项目文件到应用EXE文件中51Testing软件测试网cH N${!PL

e`:gu"WpB:v'M)Q0通常,当你发布应用程序时,你必须同时包括你的报表项目文件。如果你让报表项目文件成
^(K4g,A|*R(MA0为一个独立文件,你就可以采用简单方式对其更新而不需要重新编译你的应用程序。如果你51Testing软件测试网;z'oX3]$TTJ
想把报表项目文件包含在你的应用程序的EXE中,也是很简单的,你需要:设定RvProject
fibmWW0件的StoreRAV属性。你通过Load一个报表项目文件把它包含在DFM中,通过Save可以提取出先51Testing软件测试网6j/C8X}xyP2c9f
前的一个报表项目文件,通过Clear可以删除镶嵌的报表项目文件。当报表项目文件被装载51Testing软件测试网&yI%{Qi4E#E,D
进应用程序的EXE中后,你就不再需要同时把报表项目文件打包进发布的应用程序了!
0lof(ps_0L051Testing软件测试网T.p{,p0Vg^\G8v
结论
"@ v {(OU051Testing软件测试网Q9tOP-[v$^1X
我们学习了如何使用可视报表设计器,以及相应的一些提示。51Testing软件测试网TW7q$CRG;c
51Testing软件测试网^$`o O?.m+Ow


相关阅读:

TAG: Delphi编程

 

评分:0

我来说两句

Open Toolbar