电子表格FineReport教程:[27]下拉树示例
下面就通过电子表格FineReport来简单介绍一下下拉树。
工具/原料
电子表格FineReport7.1.1
大小:148.2M 适用平台:windows/linux
下拉树控件自动构建示例
1、问题描述FR7.0能够将满足以下条件的数据自动生成树数据集,完全不用用户手动书写SQL查询语句,使用树数据集自动构建下拉树:
![电子表格FineReport教程:[27]下拉树示例](https://exp-picture.cdn.bcebos.com/32fe25ef354f50b8297d7768dc4afa32929c189b.jpg)
3、转为树数据集新建树数据集Tree1,使用ds1来构建树,如下图:
![电子表格FineReport教程:[27]下拉树示例](https://exp-picture.cdn.bcebos.com/def3c219ce2c5b1bb99d2b6f2b39131fcfec0e9b.jpg)
下拉树控件分层构建示例
1、问题描述FR7.0中的分层构建下拉树其实就是FR6.5版本中的动态SQL,但在FR7.0中需要将每个SQL定义为一个报表数据集,在下拉树数据定义界面选择对应的数据集。
2、示例以下我们用下图地区、省份、城市三列数据,通过分层构建的方式来实现下拉树:
![电子表格FineReport教程:[27]下拉树示例](https://exp-picture.cdn.bcebos.com/1f9feadca039131f65af0c6ae275f2c4ed990a9b.jpg)
5、效果查看点击分页预览,则可在参数界面上看到下拉树控件,效果如上图所示。
多选下拉树实现不同级别之间的查询
1、问题描述数据库中有3个级别的数据,分别是地区,城市,以及客户名称,如果想实现同时选择查询出华东地区下所有公司以及北京的某个公司的数据,这个该怎么实现呢?效果如下:
![电子表格FineReport教程:[27]下拉树示例](https://exp-picture.cdn.bcebos.com/6834ecc4ec995943b542974d95425d6b05d1049b.jpg)
4、新建模板参数切换到参数界面,点击菜单栏中的模板>模板参数,点击添加按钮,新建模板参数tree。
5、构建树点击右侧下方的的全部添加按钮,然后将tree控件的类型选择为下拉树。数据选中下拉树控件,在控件属性面板中点击数据,开始构建树。构建方式选择分层构建。层次1:选择ds1,实际值和显示值都为地区。层次2:选择ds2,实际值和显示值都为城市。层次3:选择ds3,实际值为客户ID,显示值为客户名称。
![电子表格FineReport教程:[27]下拉树示例](https://exp-picture.cdn.bcebos.com/edd84743040148fead0182d88fd149299b88029b.jpg)
8、如果在参数面板设置下拉树属性时没有勾选结果返回完整层次路径,那么其过滤设置如下图:
![电子表格FineReport教程:[27]下拉树示例](https://exp-picture.cdn.bcebos.com/486884883913e8e556ad720f352f477047187d9b.jpg)
4、注:如果下拉树属性中不勾选结果返回完整层次路径,那么下拉树返回值不是路径值,故无需捂执涡扔使用treelayer函数对下拉树返回值进行再次修改,直接使用即可,此时,可以将ds1数据集的SQL语句修改为SELECT * FROM [S订单] where 1=1 ${if(len(aa)==0,""," and 货主城市 = '"+aa+"'")}
5、报表设计如下图:
![电子表格FineReport教程:[27]下拉树示例](https://exp-picture.cdn.bcebos.com/e57a258602214f5757158c08732064fb970b739b.jpg)
7、多选下拉树数据准备打开上面的单选下拉树模板,更改数据集ds1:SELECT * FROM [S订单] where 1=1 ${if(len(aa)==0,""," and 货主城市 in ("+"'"+treelayer(aa,true,"\',\'")+"'"+")")}注:treelayer(aa,true,"\',\'")返回的值是以“'”为分隔符的字符串,形如“北京,天津”这样的字符串,但是在sql语句中实现in过滤必须形如“'北京,天津'”,两者比较,后者比前者最前面和最后面多了两个单引号,则在treelayer(aa,true,"\',\'")前面和后面拼接两个单引号即可。下拉树选中下拉树控件,在控件属性表中,勾选多选复选框,。如下图:
![电子表格FineReport教程:[27]下拉树示例](https://exp-picture.cdn.bcebos.com/974a2f21056104a399aa5c1d63d7592ae2ef6b9b.jpg)
填报页面下拉树控件返回所选层级值
1、问题描述前面几篇文档介绍了参数界面下拉树的使用方法,以及treelayer函数的使用,那么在填报页面使用下拉树控件时,如果不做任何处理,控件的返回值就会是层级路径,而不是所选层级的值,并且往数据库中填报的值也会是路径值,那么怎样设置才能使单元格显示为所选层级值,并且录入数据库也是所选层级值呢。
2、示例在填报页面使用下拉树展现部门结构,实际值为部门ID,显示值为部门名称,希望实现下拉树所在单元格返回值为所选层级值的显示值,入库时时所选层级值的实际值。如下图所示:
![电子表格FineReport教程:[27]下拉树示例](https://exp-picture.cdn.bcebos.com/586bfdefe07814310cf5eddfdc6699cf0353629b.jpg)
4、添加下拉树在报表主体添加一个下拉树控件,在属性设置页面去掉只返回叶子节点前面的勾选,新建一个单选下拉树,构建方式选择自动构建,实际值为部门ID,显示值为部门名称,设置如下图:
![电子表格FineReport教程:[27]下拉树示例](https://exp-picture.cdn.bcebos.com/2e223d85e036e2919babec53b2723d03baea5b9b.jpg)
6、形态设置如上所说,获取路径值的最后一个部门id的值,可用treelayer函数实现,即treelayer($改怊眶峋$$),用sql语句转换部门ID和部门名称,则可用sql函数,完整的公式如下:sql("FRDemo","select 部门名称 from 公司部门 where 部门id='"+treelayer($$$)+"'",1)如下图:注:如果此处的下拉树是多选下拉树,那么sql函数应该为:sql("FRDemo","select 部门名称 from 公司部门 where 部门id in ('"+treelayer($$$)+"')",1)
![电子表格FineReport教程:[27]下拉树示例](https://exp-picture.cdn.bcebos.com/f7e6410f822b74eef77194abda2c8cf1d9a74a9b.jpg)
8、结果查看点击填报预览,选择“财务部”,web端的结果如上所示,点击提交按钮之后,查看表里面的数据,会发现填报进去的是财务部的实际值“13”。而不是“1,13”,如下图:注:不论是单选下拉树还是多选下拉树均可这么设置。
![电子表格FineReport教程:[27]下拉树示例](https://exp-picture.cdn.bcebos.com/57af657f860e7c751db72346650d3aceabd7bf9b.jpg)