深入理解Crystal Reports的推送和拉取数据模型

Crystal Reports是一个强大的报告生成工具,它支持两种数据模型:推送(push)和拉取(pull)。拉取模型相对简单,设计时定义一个连接字符串,CrystalReports引擎(CRE)会根据模板生成报告。用户可以在运行报告前提供自定义的连接字符串,但无论如何,CRE都是直接与表格打交道的。

但如果有需求使用存储过程而不是表格,或者需要预先缓存一些数据,或者使用CRE未知的数据源,那么就需要采用推送模型。不幸的是,关于如何在.NET环境下实现这些推送机制的信息非常有限,除了一个简单的例子,展示了如何在VS2005中创建一个使用推送模型的报告,但没有使用自定义数据适配器。

使用代码

由于Visual Studio自动生成了大部分代码,所以实际需要编写的代码非常少。首先,需要一个报告模板(自行准备或获取)。

包括:

  • 数据 → 添加新数据源
  • 数据库
  • 新建连接

注意:更改将自动影响自动生成的适配器类(每个表格一个)。

复制粘贴了生成的代码,移除了硬编码值,比如从应用程序配置文件中提取连接字符串,并用自定义方法获取数据库连接(变量名为_connection),并在InitConnection()中将其设置为null

也可以在InitCommandCollection中更新SqlCommand对象,这些对象用于从数据库提取数据。

注意:每个表格的适配器类都有自己的连接和命令集合。

更改Fill方法以使用自定义连接和任何希望提供的参数(在例子中是存储过程参数)。

注意:Fill方法的末尾有一个实际的调用,即this.Adapter.Fill(dataTable)。关键是InitCommandCollection是内部调用的,如果通过Fill提供了一些参数,比如存储过程参数,那么请将它们存储在内部变量中,并在初始化时提供。

创建自定义数据集,例如:

CustomDataSet ds = new CustomDataSet();

创建所需的适配器数量。

为每个适配器调用Fill方法,并提供任何想要提供的参数(前提是方法的接口已经被修改)。

由于Fill方法的第一个参数是一个数据集对象(或对象集合),所以在所有Fill方法完成后,将得到一个填充了所有请求数据的数据集。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485