在 Crystal Reports 中,参数是一个非常核心和强大的功能,它本质上是一个占位符,用于在报表运行时向用户收集信息,并利用这些信息来控制报表的显示内容、过滤数据、进行计算或格式化输出。

可以把参数想象成一个“问题”,在报表生成前,Crystal Reports 会向用户提出这个问题,然后根据用户的回答来定制最终的报表。
参数的类型
Crystal Reports 支持多种类型的参数,以满足不同的业务需求。
值参数
这是最常用的参数类型,用于接收一个具体的值。
- 文本: 用于接收字符串,如客户名称、城市名称等。
- 日期: 用于接收日期或日期范围,如“开始日期”和“结束日期”。
- 日期/时间: 结合了日期和时间。
- 数字: 用于接收整数或小数,如订单金额、产品数量、ID等。
- 货币: 专门用于接收货币值。
- 布尔值: 用于接收“是/否”、“真/假”的选项,常用于控制是否显示某个部分或应用某种格式。
- 对象/公式: 接受一个报表对象(如字段)或公式的结果。
范围参数
用于接收一个值的范围,从...到...”,它通常由两个值参数(起始值和结束值)组成。

- 示例: 在销售报表中,让用户输入一个日期范围来筛选特定时间段内的销售数据。
动态参数字段
这是一种特殊的参数,它的值来源于数据库中的一个字段,当用户选择一个值时,实际上是选择了该字段中的一个具体记录。
- 用途: 通常用于创建“级联参数”(Cascading Parameters),即第一个参数的选择会影响第二个参数的可用选项。
- 示例: 第一个参数让用户选择“国家”,第二个参数(动态参数字段)会自动列出该国家下的所有“城市”。
可视化参数
允许用户在运行时选择一个值,但提供更友好的交互方式,而不是简单的文本框。
- 单选按钮: 当参数只有几个固定选项时非常适用。
- 复选框: 当用户可以选择多个选项时使用。
- 下拉列表: 当选项较多时,比单选按钮更节省空间。
参数的主要用途
参数在报表设计中有极其广泛的应用。
数据筛选
这是最常见的用途,使用参数作为 Record Selection Formula(记录选择公式)的条件,让用户动态决定显示哪些数据。

- 示例:
{客户.国家} = {?选择国家}
控制报表内容
根据参数的值,决定是否显示报表中的某些部分,如整个节、图表、子报表或图片。
- 示例: 使用“布尔值”参数来控制一个“备注”节是否显示。
- 右键点击节 -> “节专家” -> “公式”中输入:
{?显示备注} = True
- 右键点击节 -> “节专家” -> “公式”中输入:
和文本
将参数的值插入到报表的标题、页眉或页脚中,使报表更具针对性。
- 示例: 报表标题可以设置为
"销售报告 - " + {?选择国家}
参数化字段
将报表中的某个字段与参数关联起来,这在制作通用模板报表时非常有用。
- 示例: 设计一个通用的“订单明细”报表,用户可以通过参数选择要查看的字段(如“产品名称”、“单价”、“数量”),然后报表只显示选中的字段。
参数化公式
在公式中使用参数,使公式的计算逻辑可以动态改变。
- 示例: 一个计算“折扣”的公式可以是
If {?客户类型} = 'VIP' Then 0.2 Else 0.1。
传递值给子报表
将主报表的参数值传递给子报表,确保子报表的数据与主报表保持一致。
如何创建和使用参数(分步指南)
步骤 1:创建参数
- 在 Crystal Reports 设计界面中,点击菜单栏的 "字段资源管理器" (Field Explorer)。
- 在 "字段资源管理器" 中,右键点击 "参数字段" (Parameter Fields)。
- 选择 "新建..." (New...)。
- 在弹出的对话框中:
- 名称: 为参数起一个有意义的名字,
pCountry或pStartDate,名称前缀p是一个良好的编程习惯。 - 类型: 从下拉列表中选择合适的参数类型(如文本、日期等)。
- 提示文本: 这是报表运行时在参数输入框上方显示给用户的提示信息,请选择一个国家:”。
- 值列表: 如果想让用户从固定选项中选择,可以勾选此项并输入选项值(每行一个)。
- 可否为空: 决定用户是否可以不输入值。
- 默认值: 可以为参数设置一个默认值,这样用户可以直接点击“确定”而不必手动输入。
- 名称: 为参数起一个有意义的名字,
- 点击 "确定" 保存。
步骤 2:在报表中使用参数
创建完成后,参数字段会出现在“字段资源管理器”的“参数字段”列表中,你可以像拖拽数据库字段一样将它拖到报表的任何位置。
-
用于筛选:
- 右键点击报表的空白处,选择 "选择专家..." (Select Expert...)。
- 在“选择专家”对话框中,添加一个条件。
- 在第一个下拉框中选择一个数据库字段(
{客户.国家})。 - 在第二个下拉框中选择 "是等于" (is equal to)。
- 在第三个框中,你会看到一个 图标,点击它,然后从列表中选择你创建的参数(
pCountry)。 - 点击 "确定"。
-
:
直接从“字段资源管理器”中将参数字段拖放到报表的标题节。
步骤 3:运行报表并输入参数
当你保存并查看报表时(例如在应用程序中预览),Crystal Reports 会弹出一个对话框,显示你在创建参数时设置的“提示文本”,并要求你输入或选择一个值。
最佳实践和技巧
- 命名规范: 使用清晰、一致的命名规则,
p前缀表示参数,r前缀表示公式字段。 - 提供有意义的提示文本: 好的提示文本能极大提升用户体验,告诉用户应该输入什么。
- 使用值列表: 当选项有限且固定时,使用值列表(或创建“动态参数字段”)可以避免用户输入错误,提高效率。
- 设置默认值: 为常用参数设置默认值,可以简化用户的操作流程。
- 参数验证: 在高级应用中,你可以编写公式来验证用户输入的参数值是否有效,如果无效,可以显示自定义的错误消息并阻止报表运行。
- 处理空值: 在筛选逻辑中,要考虑用户可能不输入任何值的情况,可以使用
IsNull或IsNullOrEmpty函数来处理。- 示例:
If IsNull({?pCountry}) Then True Else {客户.国家} = {?pCountry},这样,如果用户不选国家,就会显示所有客户。
- 示例:
一个综合示例:创建一个带日期范围的销售报表
- 创建两个日期参数:
pStartDate(提示文本: "请输入开始日期:")pEndDate(提示文本: "请输入结束日期:")
- 使用选择专家:
- 打开选择专家,设置条件为:
{订单.订单日期} >= {?pStartDate}{订单.订单日期} <= {?pEndDate}。
- 打开选择专家,设置条件为:
- 创建动态标题:
- 中添加一个文本框,内容为:
"销售报告 (" + ToText({?pStartDate}, 'yyyy-MM-dd') + " 至 " + ToText({?pEndDate}, 'yyyy-MM-dd') + ")"。
- 中添加一个文本框,内容为:
- 运行报表:
- 当你运行报表时,会弹出两个日期选择框。
- 选择日期范围后,报表将只显示该时间段内的销售数据,并且标题会动态更新为你选择的日期范围。
通过掌握参数,你可以将 Crystal Reports 从一个静态的报表工具转变为一个高度灵活、交互性强的商业智能工具,为用户提供按需定制的数据视图。
