教程:使用 Session 保持 ReportDocument 对象模型

在本教程中,您需要使用 ReportDocument 对象模型,在运行时以编程方式更改报表。您还要学习如何使用 Session 使得在重新加载 Web 页期间能保持这些更改。

因为只有 Web 应用程序需要 Session 持久性,所以本教程不适用于 Windows 项目。

Note注意

有关持久性的概述,请参见 SDK 基础知识下面的“应该对 Crystal Reports 使用哪种持久性方法?”

简介

您在本教程中创建的项目将使用一个 Web 窗体,其中包含一个 CrystalReportViewer 控件和两个按钮,这两个按钮可以更改 ReportDocument 对象模型中的报表的排序顺序。

首先,需要构建尚不具备 Session 持久性的项目。在不具备持久性的情况下,您会看到排序顺序的更改只能维持一个按钮单击事件的时效。

然后,向该项目添加 Session 持久性。在创建 ReportDocument 实例时以及 ReportDocument 实例状态发生任何改变时,该实例都会被放入 Session。

每当需要重新显示报表时,都会从 Session 中调出 ReportDocument 实例,并绑定到 CrystalReportViewer 控件。这样即可保证每次显示报表时,用户查看的都是最新的 ReportDocument 实例版本。

Note注意

在本教程中所使用的是 Session,因为需要保持针对 ReportDocument 对象模型所做的修改。如果只打算使用 CrystalReportViewer 控件中包含的受限对象模型,则只应使用 ViewState。

使用 Session 保持 ReportDocument 对象时,是否还涉及其他任何持久性模型?

使用 Session 保持 ReportDocument 对象时,是否还涉及其他任何持久性模型?

是。在 ASP.NET Web 应用程序中,对象通常使用 Session 实现持久性,而 Web 服务器控件却使用 ViewState 实现持久性。由于 Crystal Reports for Visual Studio Web 应用程序使用对象和 Web 服务器控件与报表交互,因此持久性是通过 Session 和 ViewState 共同实现的:

  • Session 可以保持 ReportDocument 对象模型,该模型在运行时以编程方式与报表交互。
  • ViewState 可以保持用于显示报表的 CrystalReportViewer 控件。特别是,ViewState 能够保持在 CrystalReportViewer 的工具栏中设置的显示属性。ViewState 还可以保持通过工具栏按钮触发的任意事件(如“Zoom”、“NextPage”)。

ViewState 持久性是自动管理的。因此,在本教程中,您只需对 Session 持久性编码。

示例代码

此教程附带 Visual Basic 和 C# 示例代码,这些代码显示了项目完成后的版本。请按照本教程中的说明创建新项目或打开示例代码项目,以利用完成后的版本进行工作。

示例代码保存在按语言和项目类型分类的文件夹中。各示例代码版本的文件夹名称如下:

  • C# 网站:CS_Web_RDObjMod_Session
  • Visual Basic 网站:VB_Web_RDObjMod_Session

欲知包含这些示例的文件夹的位置,请参见“教程的示例代码目录”

在此节中:

请参见