下拉复选框参数为空选择全部 在线视频学习 请查看
参数为空选择全部
1.1 版本
1.2 问题描述
在使用参数进行过滤时,选择某个参数值后就会根据选择的值进行过滤,但是如何实现如下图效果即货主地区下拉复选框中不选择参数值时能够查询出数据表中的全部值呢?效果如下图所示:
1.3 解决思路
下拉复选框
可以通过报表参数或数据参数来实现复选,若需要实现
参数为空
选择全部,可取消勾选「
点击查询前不显示报表内容
」即可。
2.1 新建数据集
添加数据集 ds1,SQL 语句为:
SELECT * FROM 订单
。
2.2 报表设计
在第一行添加表头,将数据集
ds1
的字段依次拖入单元格中,如下图所示:
2.3 添加参数控件
1)添加一个标签控件,控件值设置为
货主地区
,如下图所示:
2)添加一个「下拉复选框控件」,控件名为
area
,
数据字典选择
数据库表
,数据库为
FRDemo
,数据表为
订单
,实际值与显示值的列名都选择
货主地区
,返回值类型为
数组
,如下图所示:
3)添加
查询控件,如下图所示:
4)点击参数面板空白处,在右侧的属性中,设置不勾选
点击查询前不显示报表内容
,
如下图所示:
2.4 设置过滤条件
双击 A2 单元格,选择
过滤
按钮,给 A2 单元格增加过滤条件,可选列为
货主地区
,操作符为
包含于
,公式:
if(len($area)==0,nofilter,$area)
,如下图所示:
注:nofilter 表示不过滤,if(len($area)==0,nofilter,$area) 表示参数 area 为空,就不过滤,若不为空则以参数值进行过滤;if(len($province)==0,nofilter,$province) 意义相同。
3.1 新建数据集
新建数据集
ds1
的 SQL 语句修改为:
SELECT * FROM 订单 where 1=1 ${if(len(area) == 0,"","and 货主地区 in ('" + area + "')")}
,
公式中 ${if(len(area) == 0,"","and 货主地区 in ('" + area + "')")} 表示若参数 area 为空就不进行过滤,若不为空则货主地区等于参数值。如下图所示:
注:where 1=1 表示条件永真,防止没有之后的参数条件时,where 多出而导致出错;len(area)==0 表示参数 area 为空;"and 货主地区='"+area+"'" 中间的 area 表示取参数值,'+' 为字符串拼接符号。
3.2 报表设计
报表设计如本文 2.2 节所示。
3.3 添加参数控件
编辑参数面板,选择「全部添加」,将「标签控件」的控件值修改为
货主地区:
,「下拉复选框控件」的
数据字典选择
数据库表
,数据库为
FRDemo
,数据表为
订单
,实际值与显示值的列名都选择
货主地区
,返回值类型为
字符串
,分隔符为
','
,如下图所示:
点击参数面板空白处,在右侧的属性中,设置不勾选
点击查询前不显示报表内容
,如下图所示:
4.1 PC 端
点击「分页预览」,不输入参数值时,直接点击「查询」,效果如本文 1.1 节所示。
4.2 移动端
App 与 HTML5 端预览效果,如下图所示:
1)示例一
已完成模板,可参考:
%FR_HOME%\webroot\WEB-INF\reportlets\doc\Parameter\下拉复选框实现参数为空选择全部-模板参数.cpt
点击下载模板:
下拉复选框实现参数为空选择全部-模板参数.cpt
2)示例二
已完成模板,可参考:
%FR_HOME%\webroot\WEB-INF\reportlets\doc\Parameter\下拉复选框实现参数为空选择全部-数据集参数.cpt
点击下载模板:
下拉复选框实现参数为空选择全部-数据集参数.cpt