[]
通过上一示例的介绍,我们了解到为查询参数设置可用数据之后,参数的输入方式将从文本框变为下拉列表框。而普通查询参数只能选择一个项目,例如按类别查询产品时,每次只能查看一个类别的产品清单。如果希望一次选择多个产品类别,就需要用到多选下拉列表。下图为多选下拉列表的实际应用效果。

报表中针对多选下拉列表的实现,有两种方法,下面分别为您介绍这两种方法的具体实现步骤。
先定义一个数据集名称为“ 产品类别 ”的新建数据集(内嵌数据集)。查询语句为: select distinct 类别名称 from 销售明细 。然后单击验证和确定保存数据集定义。

type=info
提示: 您也可以省略“distinct”,使用
select 类别名称 from 销售明细。因为报表中,当数据集字段作为报表参数的可用数据时,会自动去重。
配置报表参数"Type"(字符串类型),设置提示文本为"产品类别:",打开多值数据右侧的开关,并关联数据集字段,数据字段为类别名称(作为传给数据集 SQL 语句的实际参数值),标签字段为类别名称(显示在下拉列表框中的字符串),排序规则选择标签字段,配置完成后,报表查看页面将生成可供用户选择的多选下拉列表框。

当给报表参数设置了可用数据、并且打开了多值数据开关后。在报表查看页面的参数栏中,就会以下拉列表框的形式来显示,并且用户可以一次选择多个参数。如下图:

定义带查询参数的数据集。为数据集添加新的查询参数,然后设置参数值表达式为: {@Type} 。在查询语句中输入带参数的 SQL 语句: select * from 销售明细 where 类别名称 IN (@查询参数1) ,然后单击验证和确定保存数据集。

type=info
注意: 查询语句中的 where 条件部分,对应多值参数时,应为IN子句,而不是普通的等于、大于、小于等比较操作符。
在数据集中开启多选,勾选多个字段,然后拖拽到报表设计器的画布区域中。

在预览界面,可以看到下拉框式的查询参数,列表中的数据已进行排序(按类别名称的Unicode码)。用户可以逐个勾选想要查询的多个产品类别(输入关键字可自动检索),也可以选择“(全选)”以选中所有的类别,从而实现按多个类别查询产品列表的需求。如下图:

type=info
提示: 方法二的主要思路是先创建一个带有多值查询参数的数据集,然后创建报表时直接使用该数据集。
在直连数据集中,单击参数,添加参数如下图所示。

在直连数据集中,添加自定义表,输入 SQL 查询语句: select * from 销售明细 where 类别名称 IN (@Type) ,如下图所示。

将自定义表拖拽到右侧的关联关系设置面板中,并保存数据集,例如名为“ 数据集1 ”。

新建空白RDL报表,在报表设计器的右侧,选择数据绑定设置面板,单击数据集后的添加,选择刚才创建的“ 数据集1 ”数据集。添加完数据集后,数据集中的参数也将显示在查询字段列表中。

定义一个名称为“ 产品类别 ”的新建数据集。查询语句为: select distinct 类别名称 from 销售明细 。然后单击验证和确定保存数据集定义。

type=info
提示: 您也可以省略“distinct”,使用select 类别名称 from 销售明细。因为报表中,当数据集字段作为报表参数的可用数据时,会自动去重。
将报表参数的提示文本修改为“ 产品类别: ”,在可用数据部分使用查询结果并选择上面定义的产品类别数据集。在数据字段下拉框中选择“ 类别名称 ”,在标签字段下拉框中选择“ 类别名称 ”,并设置排序规则为标签字段,如下图。

type=info
注意: 此处参数名称需与之前数据集1中定义的参数名称一致。
在数据集中开启多选,勾选多个字段,然后拖拽到报表设计器的画布区域中。

在预览界面,可以看到下拉框式的查询参数,列表中的数据已进行排序。逐个勾选想要查询的多个产品类别(输入关键字可自动检索),也可以选择“(全选)”以选中所有的类别,从而实现按多个类别查询产品列表的需求。如下图:
