我们在使用
ActiveRepots
的时候,通常都是在工程里建一个
.rpx
文件,然后自动会有一个对应的代码文件,我们就把代码和处理逻辑写在代码文件里。但是,能不能脱离代码文件,只使用
.rpx
文件来生成报表呢?答案是可以的,
ActiveReports
提供的
EndUser
功能可以做到这一点。
ActiveRepots
自带的示例代码中包括了两个
EndUser
功能的例子:
DiamondReports
和
EndUserDesigner
,前者的功能齐备些,后者比较简单,但是对于学习使用
EndUser
功能,比较直观,下面说说在
winform
和
web
环境下如何使用。
运行
EndUserDesigner
示例程序,会看到一个在
VS.net
中的报表设计界面非常相似的界面。有工具栏,有字段列表,有报表布局,有属性,等。实际上最主要的两个控件是
ardMain
和
ardReportExplorer
,
ardMain
就是用来显示报表布局的,
ardReportExplorer
用来显示当前
ardMain
的数据源的字段列表和布局的各个部分。
使用
EndUser
主要有两个步骤:设定数据源,设计报表布局。设定数据源可以通过点击布局部分
Detail
字样前的图标,会弹出一个对话框,在这里可以设置数据源类型,连接串,
sql
语句。完成后会在字段列表部分显示出通过
sql
语句得到的字段,然后就可以设计报表布局了。你可以把字段列表中的某一项拖放到布局上,会自动生成控件并绑定
DataField
。
在
Winform
下,设计完成后就可以通过
EndUserDesigner
菜单上的“预览”看到你的报表了。然后可以用
Save Layout
菜单将报表保存为一个
.rpx
文件。要在
web
环境下使用刚才设计的报表,步骤要复杂些:
1.
按照上面的步骤设计
.rpx
文件。
2.
在
web
项目中包括
.rpx
文件。
3.
配置
web.config
文件,为了能在浏览器中直接显示报表,需要对
Web.config
文件作一些设置,在
system.web
标记里添加以下内容:
<httpHandlers>
<!--
********** ActiveReports HttpHandler Configuration **********
-->
<add verb="*" path="*.rpx"
type="DataDynamics.ActiveReports.Web.Handlers.RpxHandler, ActiveReports.Web,
Version=4.0.0.1052, Culture=neutral, PublicKeyToken=cc4967777c49a3ff" />
<add verb="*" path="*.ActiveReport"
type="DataDynamics.ActiveReports.Web.Handlers.CompiledReportHandler,
ActiveReports.Web, Version=4.0.0.1052, Culture=neutral,
PublicKeyToken=cc4967777c49a3ff" />
<add verb="*" path="*.ArCacheItem"
type="DataDynamics.ActiveReports.Web.Handlers.WebCacheAccessHandler,
ActiveReports.Web, Version=4.0.0.1052, Culture=neutral,
PublicKeyToken=cc4967777c49a3ff" />
</httpHandlers>
这里的
Version
和
PublicKeyToken
都必须正确,如果你不清楚,可以通过管理工具里的
.net framework
配置工具来查看这些属性。
在
ActiveReports
的文档里说在
VS2005
中如果不是使用
IIS
就可以不用配置,在
VS2003
里是必须的。但是我在
VS2005
中,如果不加这段配置还是不行。
4.
在页面上使用,例如:
<a href="
YourReport
.rpx?OutputFormat=pdf">
Sample
</a>
注意这里传入的参数
OutputFormat=pdf
,这样会使在浏览器里打开报表生成的
pdf
文件。
目前
ActiveReports
只支持
pdf
和
html
两种格式,如果你使用
excel
或者
rtf
,是没有效果的,都会按照
html
格式显示。
上面说了基本的操作,但是如果在
sql
语句里有参数怎么作呢?怎样向
sql
语句传递值来取得指定的数据呢?
首先要在
sql
语句里嵌入参数的表达形式,例如:
Select * from Customers WHERE Country = '<%Country%>'
是不是有些像
CodeSmith
的代码生成脚本?
下面要作的就是传参数值了,在
web
下比较简单,使用
QueryString
,例如,我们把
Url
写成这样:
YourReport
.rpx?OutputFormat=pdf
&
Country
=China
,一切就
OK
了。
在
Winform
下,不用自己传参数值,只要你在运行报表的时候,
ActiveReports
会自己解析
Sql
语句,分析出有哪些参数,然后会弹出一个对话框,列出参数,要求你输入值。
可以看出,使用
EndUser
功能是很简单的,但是它一样也有局限,就是适合较简单的业务,虽然设计一个报表很简单,甚至可以把一部分工作交给客户自己完成,但是不要指望客户能作多么复杂的东西,客户宁可打个电话要求开发者帮忙义务劳动下,维护的工作量最终还是在程序员身上。