为您的项目选择正确的对象模型

若要为项目选择正确的对象模型,则必须了解使用 CrystalReportViewer 控件的最佳做法,并且知道 CrystalReportViewer 如何与其它对象模型进行交互。

使用 CrystalReportViewer 控件的最佳做法

高效的 Web 应用程序会将其表示层与其基础业务逻辑明确分开。

ASP.NET 控件的设计在本质上就提倡这种方式。它将表示信息封装到控件中,然后将该控件绑定到执行业务逻辑的基础对象或对象模型。

CrystalReportViewer 是一个遵循此结构的 .NET 控件。它在 Web 或 Windows 窗体(表示层)上起到一个显示对象的作用,并且可以绑定到以下报表对象模型中的任何一个:

  • ReportDocument 对象模型
  • 可通过升级获得的对象模型:
    • ReportClientDocument 对象模型(报表应用程序服务器)
    • InfoObject 对象模型(Crystal Reports Server 或 BusinessObjects Enterprise)

在最佳做法方案中,CrystalReportViewer 控件绑定到其中一个执行业务逻辑(通常是对报表进行操作)的对象模型。

在该方案中,CrystalReportViewer 控件将其编程交互限制为只修改显示设置(例如,隐藏或显示查看器的工具栏或该工具栏中的一个按钮)。

CrystalReportViewer 对象模型

CrystalReportViewer 控件包含可用于控制该控件如何显示报表的属性和方法。它还包含少量用于与绑定到该控件的报表进行交互的属性和方法。这些属性和方法构成一个受限对象模型。

一些报表绑定方案依赖于 CrystalReportViewer 对象模型。在这些方案中,CrystalReportViewer 控件将直接绑定到一个报表(例如,传入一个指向文件目录中的报表的路径字符串),而不是首先将该报表封装到对象模型中。在这些方案中,由于 CrystalReportViewer 控件直接封装报表,因此必须依靠该控件的受限对象模型来通过编程方式与报表进行交互。

但在大多数绑定方案中,不建议使用 CrystalReportViewer 作为对象模型,而应使用 ReportDocument 对象模型,原因如下:

  • CrystalReportViewer 对象模型可能会造成对象模型冲突。有关更多信息,请参见“避免混用对象模型”
  • 使用 CrystalReportViewer 对象模型只能与报表进行有限的交互;它只具有 ReportDocument 对象模型中提供的一小部分功能。
  • CrystalReportViewer 对象模型会使表示层和代码中的基础业务逻辑之间的分隔变得模糊。

ReportDocument 对象模型

ReportDocument 对象模型比 CrystalReportViewer 功能更强大,范围更广泛。它是 Crystal Reports for Visual Studio SDK 附带的一个部件,并提供了在代码中控制报表的广泛能力。

有关 ReportDocument 对象模型的说明和图解,请参见“结构”下面的 “ReportDocument 对象模型”

有关演示如何根据 ReportDocument 对象模型编写代码的教程,请参见 “ReportDocument 对象模型教程”

通过升级获得的对象模型

如果将报表解决方案升级到 Crystal Reports Server 或 BusinessObjects Enterprise,则可以利用它们的对象模型 ReportClientDocument 和 InfoObject。

Note注意

如果您不能确定要为您的应用程序部署哪种报表解决方案,请参见“比较所有 Business Objects 报表解决方案的结构”

应该使用哪种对象模型?

如果不打算升级到 Crystal Reports Server 或 BusinessObjects Enterprise,建议在使用 Crystal Reports SDK 进行开发时使用 ReportDocument 对象模型。

Note注意

在 Crystal Reports 10 或更高版本以及 Crystal Reports for Visual Studio 2005 及更高版本中,为了方便升级到托管报表解决方案,已将 ReportDocument 对象模型桥接到 ReportClientDocument 对象模型。