ASP.NET服务器控件ReportViewer(二)
以下载自MSDN,如果您不想看这些啰嗦的废话,可以直接跳到 ASP.NET服务器控件ReportViewer(三)
注:本教程附2个事例:
l 在本地处理模式下将数据库数据源与ReportViewer Web服务器控件一起使用
l 在本地处理模式下将业务对象数据源与ReportViewer Web服务器控件一起使用
如果您已经对ReportViewer控件基础知识比较了解,可以直接参阅事例。
Microsoft Visual Studio 2005 包括报表设计功能和 ReportViewer 控件,使您可以将功能完整的报表添加到自定义应用程序。报表可以包含表格格式数据、聚合数据和多维数据。提供 ReportViewer 控件的目的是可以处理和显示应用程序中的报表。控件有两种版本。ReportViewer Web 服务器控件用于在 ASP.NET 项目中驻留报表。ReportViewer Windows 窗体控件用于在 Windows 应用程序项目中驻留报表。
这两种版本的控件都可以配置为以本地处理模式或远程处理模式运行。配置为何种处理模式将影响有关报表从设计到部署的所有方面。
l “本地处理模式”是指 ReportViewer 控件在客户端应用程序中处理报表。所有报表都是使用应用程序提供的数据作为本地过程处理的。若要创建本地处理模式下使用的报表,需要使用 Visual Studio 中的报表项目模板。有关详细信息,请参阅将 ReportViewer 配置为进行本地处理。
l “远程处理模式”是指由 SQL Server 2005 Reporting Services 报表服务器处理报表。在远程处理模式下,ReportViewer 控件用作查看器,显示已经在 Reporting Services 报表服务器上发布的预定义报表。从数据检索到报表呈现的所有操作都是在报表服务器上处理的。若要使用远程处理模式,则必须具有 SQL Server 2005 Reporting Services 的许可副本。有关详细信息,请参阅将 ReportViewer 配置为进行远程处理。
若要在应用程序中使用 ReportViewer 控件,则必须了解如何将控件添加到项目表单或网页中,如何配置控件来使用本地报表定义或服务器报表,如何更新数据源引用,以及如何在应用程序中测试和部署报表和控件。提供的演练有助于您学习这些关键技能。有关详细信息,请参阅示例和演练。
您可以将 ReportViewer 控件配置为在本地处理报表,以使这些报表可以使用该控件提供的内置处理功能。如果配置 ReportViewer 控件进行本地处理,则所有的报表处理都在承载应用程序的计算机上进行。报表使用的所有数据必须从客户端应用程序提供的数据中检索。
报表设计期间,必须事先定义报表中使用的数据源。运行时,应用程序必须生成数据表或检索报表中使用的数据。本地处理的报表可以获取数据表和业务对象中的数据。根据您使用的是 Web 服务器控件还是 Windows 窗体控件,为本地处理的报表配置数据源的步骤有所不同。有关支持的数据源的详细信息,请参阅为 ReportViewer 报表创建数据源。
如何配置 ReportViewer 进行本地处理
若要配置 ReportViewer 进行本地处理,应选择或创建要用于 ReportViewer 控件的客户端报表定义 (.rdlc) 文件:
1. 将工具箱的“数据”部分中的 ReportViewer 控件添加到项目中的窗体或网页。
2. 在“ReportViewer 任务”智能标记面板中,单击“设计新报表”来创建您要使用的 .rdlc 文件。另外,您也可以选择“选择报表”来使用已是您项目的一部分的现有 .rdlc 文件。您只能选择一个报表。如果报表包含子报表或钻取链接,则文件列表中将会显示其他报表。
3. 单击“设计新报表”会将空的 .rdlc 文件添加到您的项目中,以图形设计模式打开空报表,并提供菜单和设计图面,以便您可以创建新报表。若要创建新报表,您必须已经定义要使用的数据集。有关创建 .rdlc 文件的详细信息,请参阅创建客户端报表定义 (.rdlc) 文件。
4. 生成或部署应用程序以验证报表是否正确地显示在应用程序中。
您可以使用演练来了解如何配置和使用本地处理模式的 ReportViewer 控件。所有演练都包括本地处理报表的控件配置。有关详细信息,请参阅 示例和演练。
何时使用本地处理
建议对于包括中小型号报表和数据集的应用程序使用本地处理模式。由于所有数据和报表的处理都是在客户端进行的,因此,如果您试图处理大型或复杂的报表和查询,性能可能会降低。如果您需要简单的部署策略,其中应用程序的所有部分都在同一台计算机上一起运行,也建议使用本地处理模式。
本地处理模式的功能不及远程处理强大,它适用于不需要报表服务器的独立应用程序。熟悉在远程 SQL Server Reporting Services 报表服务器上运行的服务器报表的用户应注意以下特别之处:
1. 客户端报表定义 (.rdlc) 中的报表参数不映射到查询参数。客户端报表定义中没有参数输入区域,它接受随后在查询中使用的值。
2. 客户端报表定义不包含嵌入式查询信息。您必须定义返回可供报表使用的数据的数据源。
3. 通过 RSClientPrint ActiveX 控件执行的基于浏览器的打印不适用于 ReportViewer Web 服务器控件中运行的客户端报表定义。打印控件是报表服务器功能集的一部分。
如果您受到这些特别之处的影响,您应该迁移到 Reporting Services 安装或编写提供您所需功能的应用程序代码。
1. 向项目中添加 Windows 窗体或网页。
2. 在图形设计模式中,将工具箱中的 ReportViewer 控件拖至窗体或网页。ReportViewer 控件位于工具箱的“数据”组中。控件包括“ReportViewer 任务”智能标记面板,这样您可以立即选择报表。
3. 在“ReportViewer 任务”智能标记面板中,选择任务以添加报表并配置控件。指定报表确定将控件配置为本地处理还是远程处理。
l 单击“设计新报表”启动报表设计器,并在您的应用程序中创建报表定义 (.rdlc) 文件。可以在您的应用程序中创建在客户端本地处理的新报表。若要了解有关创建报表的详细信息,请参阅创建客户端报表定义 (.rdlc) 文件。
l 使用“选择报表”来选择现有报表定义。您可以选择在项目中定义的本地报表定义 (.rdlc) 文件,也可以选择“服务器报表”来选择在 SQL Server 2005 Reporting Services 报表服务器上发布的报表。
l 选择服务器报表将控件配置为远程处理。若要选择服务器报表,必须知道报表服务器 URL 和报表的路径。报表路径必须以正斜杠 ( / ) 开头。若要运行报表,必须对报表服务器具有权限才能访问报表。如果不知道 URL 或报表路径,请咨询报表服务器管理员。有关服务器报表的详细信息,请参阅将 ReportViewer 配置为进行远程处理。
l 选择现有的报表定义 (.rdlc) 文件将控件配置为本地处理。选择报表时,必须选择 .rdlc 文件;即使您的项目中包含 .rdl 文件,也不能指定 .rdl 文件。如果要使用 .rdl 文件,必须对其进行转换。有关详细信息,请参阅创建客户端报表定义 (.rdlc) 文件和转换 RDL 文件和 RDLC 文件。
l 单击“在父容器中停靠”展开 ReportViewer 控件的视图图面,以便它使用窗体或页面中所有可用空间。此选项可用于 Windows 窗体控件。
l 单击“重新绑定数据源”更新报表中使用的数据表和业务对象的数据源绑定。此选项在为控件选择报表之后可用。如果修改报表数据源,或在图形报表设计环境之外修改数据绑定报表项(例如,直接编辑 XML),则需要重新绑定数据源。
4. 选择 ReportViewer 控件并打开“属性”窗口。
5. 对 ReportViewer 控件设置属性以确定视图区域的可见性和可用性。可使用参考文档了解每种属性。有关详细信息,请参阅 ReportViewer 属性。若要了解 ReportViewer 工具栏,请参阅配置并使用 ReportViewer 工具栏。
6. 生成或部署应用程序以在窗体或页面中预览报表。
ReportViewer 控件支持本地处理模式,该模式允许用户使用控件的内置处理功能运行客户端报表定义 (.rdlc) 文件。可以容易地在应用程序项目中创建以本地处理模式运行的报表。创建这种报表的方法有两种:
l 可以向应用程序项目中添加报表项。从“项目”菜单中选择“添加新项”时,可以选择“报表”模板,从空白报表中生成报表布局。
l 可以在配置 ReportViewer 控件时,单击“设计新报表”。即打开一个空白报表。
如何创建和预览本地报表:
1. 在 Microsoft Visual Studio 2005 中,打开应用程序项目或网站。
2. 创建要使用的数据源。可以使用项目中可用的数据集中定义的数据表或业务对象。有关详细信息,请参阅为 ReportViewer 报表创建数据源。
3. 创建要在项目中使用的报表定义 (.rdlc) 文件。
4. 通过将工具箱中的表、文本框、矩阵、列表或图表添加到空白报表来定义报表布局。这些项称为“数据区域”。数据区域绑定到数据源。具体来说,就是将数据区域中的每个单元映射到数据源中的字段。有关详细信息,请参阅向 ReportViewer 报表添加数据区域。
5. 通过添加样式、格式设置、图像、边框、页眉、页脚、排序及其他报表功能来完成报表。有关详细信息,请参阅定义报表布局。
6. 选择将包含控件的窗体或页面。
7. 在图形设计模式中,将 ReportViewer 控件添加到网页或窗体。ReportViewer 控件位于工具箱的“数据”部分中。有关详细信息,请参阅添加和配置 ReportViewer 控件。
8. 在页面或窗体中调整控件的大小和位置。
9. 在“ReportViewer 任务”智能标记面板中,选择创建的客户端报表定义 (.rdlc) 文件来将报表绑定到控件。有关打开智能标记面板的详细信息,请参阅使用“ReportViewer 任务”智能标记面板。
若要预览报表,可以生成或部署应用程序。只能通过在 ReportViewer 控件中运行报表对其进行预览。没有只是针对 .rdlc 文件的单独预览模式。请注意,您可以随时打开和编辑报表定义,然后生成或部署应用程序来检查结果。
向项目添加新的报表项:
l 向项目添加新的报表项时,会创建空白报表,并向项目添加 Report.rdlc 文件。报表定义以图形设计模式打开。报表对象命名空间添加到项目中,可用的报表控件添加到工具箱中。
向报表添加报表项:
可以轻松创建简单的报表,方法是将报表项(例如,文本框、表、图表和图像)拖至报表设计图面,并对那些项设置属性。
l 较复杂的报表可能包括用于自定义报表输出的参数和表达式。例如,若要获得某种股票的市场分析报表,必须向报表中添加参数才能指定股票代码。您可以在您的应用程序中提供一个用户界面,用于从用户那里搜集参数值。参数可以传递到查询,以便更准确地指定数据选择条件;也可以用于筛选结果集,以便在报表中仅显示部分结果集。可以通过您的应用程序预定义参数值并传入;也可以在执行报表之前由用户指定参数值。
l 表达式必须使用 Microsoft Visual Basic 编写,用于聚合数据或执行条件格式设置。报表还可以包含自定义代码。您可以在报表中嵌入自定义代码,也可以对作为应用程序一部分的自定义程序集调用方法。与表达式不同,自定义代码可采用 Visual Basic 以外的其他语言编写。
您可以将报表和 ReportViewer 控件作为应用程序的一部分自由发布。根据控件类型以及报表是配置为本地处理还是远程处理,部署要求会有很大不同。在同一个应用程序中,既可以部署本地处理的报表,也可以部署远程处理的报表。
重新发布 ReportViewer 控件
可重新发布的 ReportViewer 控件是一个名为 ReportViewer.exe 的自解压缩文件,其中包括一个 .msi 文件以及其他文件。您可以在以下位置找到 ReportViewer.exe 文件:C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\Report Viewer\ReportViewer.exe。
您所使用控件的类型决定运行 ReportViewer.exe 的位置。
l 如果使用 ASP.NET 应用程序部署控件,则必须在部署计算机上运行 ReportViewer.exe。
l 如果使用 Windows 窗体应用程序部署控件,也必须在部署计算机上运行 ReportViewer.exe。您可以使用引导程序来自动完成此步骤:
1. 打开项目属性页。
2. 单击“发布”,再单击“必备组件”。
3. 选中“Microsoft Visual Studio 2005 报表查看器”,然后单击“确定”。
4. 发布应用程序。
在安装应用程序时,会在本地计算机上进行检查,以确定是否已安装 ReportViewer。如果未安装,安装程序将安装它。
部署报表查看器 Web 服务器控件的注意事项
在 Web 场中部署 ASP.NET 应用程序需要进行其他配置,以确保在整个场中维护视图状态。如果是在 Web 场环境中部署 ReportViewer Web 服务器控件,则应在应用程序的 Web.config 文件中指定 machineKey 元素。有关详细信息,请参阅 ReportViewer 的 Web.config 设置。
必须注意,在 ReportViewer Web 服务器控件中处理的报表对浏览器有要求。浏览器兼容性问题会影响某些种类的报表功能的可用性。有关详细信息,请参阅 ReportViewer Web 服务器控件的浏览器支持。
分发报表
除非在运行时动态生成客户端报表定义 (.rdlc) 文件,否则本地处理的报表将以 .rdlc 文件存储在文件系统上,并且必须与应用程序一起提供。这些文件可以安装在磁盘驱动器上,或者编译到应用程序可执行文件中。
在远程服务器上处理的报表将存储在 Microsoft SQL Server 2005 Reporting Services 报表服务器上。应用程序中不包含任何报表文件,因为报表是远程处理的,并且本地系统中不存在报表。若要部署在报表服务器上发布的报表,必须提供对报表服务器进行访问的权限,并确保应用程序用户有权查看该服务器上的报表。部署服务器报表需要了解报表服务器所使用的身份验证扩展插件,以及提供内容访问权限和操作权限的、基于角色的身份验证模式。有关详细信息,请参阅服务器报表的部署注意事项。
如果您将 ReportViewer 控件配置为以本地处理模式运行,则客户端应用程序必须提供报表中包含的所有数据。在将数据用于报表之前,必须对数据进行完全处理。若要向报表提供数据,请在项目中定义指向数据源的数据连接。支持的数据源包括:
l 自定义业务对象
l ADO.NET DataTable
只要报表可以作为 ADO.NET DataTable 或业务对象的可枚举集合来提供,该报表就可以使用任意源中的数据。
如何为 ReportViewer 报表添加数据源
建议使用下列方法来设置数据源,以便能够在客户端报表定义中使用该数据源。
l 向应用程序项目中添加数据源并配置指向基础数据的数据连接。请在基础数据存储区中选择要使用的特定数据。要在报表中使用的数据必须存在于“数据源”窗口中。对于数据表,数据源将显示查询所返回的列名称。对于业务对象的可枚举集合,数据源将显示由类对象所公开的简单数据类型的公共属性列表。
l 若要创建数据表,请向项目中添加数据集,并使用 TableAdapter 向导配置该数据表。TableAdapter 向导提供了查询生成器和数据预览功能,使您可以立即确认查询结果。
l 若要创建业务对象,请使用“项目”菜单中的“添加新项”命令,并选择类对象。提供用于公开简单数据类型的公共属性的实现方式,以便在设计时使用。提供用于返回这些属性的可枚举集合的方法,以便在运行时使用。
配置了数据源之后,可绑定数据就会在“数据源”窗口中显示为一个层次结构。若要将数据绑定到报表,请将展开层次结构的节点拖到报表布局中的文本框或数据区域中。如果在定义了报表以后修改数据集,则必须更新报表和控件中的数据绑定。有关详细信息,请参阅更新和重新绑定数据源引用。
您可以在项目中包含任意数量的数据源。若要查看报表实际使用的数据源列表,请选择“报表”菜单中的“数据源”。若要在应用程序中预览报表及其数据,则必须生成或部署该应用程序以验证报表是否包含您期望的数据。有关配置控件和定义报表布局的详细信息,请参阅将 ReportViewer 配置为进行本地处理和创建客户端报表定义 (.rdlc) 文件。
若要立即开始操作,请使用下列演练来了解如何向项目中添加每种数据源:
l 演练:在本地处理模式下将数据库数据源与 ReportViewer Web 服务器控件一起使用
l 演练:在本地处理模式下将业务对象数据源与 ReportViewer Web 服务器控件一起使用
使用业务对象
业务对象是公开简单数据类型的公共属性的任意应用程序对象。业务对象的示例可包括基础数据存储区中的客户对象集合、由应用程序创建的书籍标题对象数组或者从 RSS XML 源创建的通道对象列表。
若要成为可访问的数据源,该集合必须支持 IEnumerable。可绑定数据在“数据源”窗口中显示为一个层次结构视图。对于业务对象,数据源将显示由类对象所公开的简单数据类型的公共属性列表。您随后可以将它们绑定到报表定义中的数据区域和文本框中。
若要提供业务对象集合,可以向项目中添加类或添加对类程序集的引用。
使用数据表
DataTable 是 ADO.NET DataSet 的一部分,通过从“项目”菜单中选择“添加新项”可以轻松地将其添加到项目中。若要配置数据连接,请启动 TableAdapter 配置向导。从“数据”菜单中选择“添加”,然后选择“TableAdapter”。还可以定义查询来限制结果集。向导结束后,可通过“数据源”窗口来访问 DataTable 中的列,以便您可以将它们绑定到客户端报表定义中的数据区域和文本框中。
为 ReportViewer Web 服务器控件定义数据源
数据源控件支持提取数据访问层,以便网页上的控件绑定到数据源,而该数据源随后绑定到实际数据。这使您可以有效地更改数据源,而无需将每个控件重新绑定到每个数据块。
当您设计网页时,“工具箱数据”区域将列出几个数据源控件,例如 SqlDataSource 和 XmlDataSource。某些数据源控件支持在网页中使用页内存,其他控件则使用共享数据。因为报表不使用页内存,所以对于 ReportViewer Web 服务器控件,最佳选择是使用 ObjectDataSource 控件。此控件在内存中缓存对象(DataTable 或业务对象集合)与报表数据区域之间架起了一座桥梁。如果向网页中添加了 ReportViewer 控件,将会自动添加和配置 ObjectDataSource 控件。
为了尽可能避免编写额外代码,ASP.NET 的网页支持提供了额外的后台处理来检测提供可绑定业务对象的集合。如果向项目中添加的类将返回一个对象集合,且这些对象可以被标识为业务对象,则该集合将会自动添加到“网站数据源”窗口中。