1. 概述
1.1 應用場景
在報表開發中,我們會遇到報表需要對行标題實現展開收起的折疊菜單的效果。這種效果一般在分析預覽或者填報中應用下拉樹控件來實現,但是在分頁預覽或者決策報表如何實現呢?這裏我們使用動态參數的方式。
預期效果:
1)在分頁預覽和決策報表中能适用
2)随着數據增長改變,折疊菜單自動改變(可複用),不用寫死
3)下拉收起功能和當前常用的下拉樹按鈕功能一緻
1.2 實現思路
1)通過父格擴展來實現全部菜單展開的效果
2)通過動态參數來标記哪些行是展開或者折疊的
3)通過條件屬性控制行隐藏顯示
2. 示例
2.1 準備數據
新建一個内置數據集,如下圖所示:
2.2 設計表格
1)設計表格,如下圖所示:
2)設置各單元格的擴展方向和左父格,如下表所示:
單元格 | 擴展方向 | 左父格 |
---|---|---|
A3 | 不擴展 | C2 |
B2 | 縱向擴展 | C2 |
C2 | 縱向擴展 | 默認 |
C3 | 縱向擴展 | C2 |
D3 | 縱向擴展 | 默認 |
2.3 添加動态參數
在 B2 單元格添加兩個動态參數類型的超級鏈接,步驟如下圖所示:
pre:if(find(C2, concatenate($pre, $cur)) > 0, replace(concatenate($pre, $cur), C2, ""), concatenate($pre, $cur))
以上 pre 參數函數内容是爲了獲取上次點擊的獲取的值。(但是如果上次已經點擊過一次,則去除點擊過的狀态)
cur:if(find(C2, concatenate($pre, $cur)) > 0, 1, if(C2 = $cur, 1, C2))
以上 cur 參數函數内容是爲了獲取本次點擊的獲取的值。
2.4 添加條件屬性
在 A3 單元格添加兩個條件屬性,步驟如下圖所示:
條件屬性 1:行高爲 0:公式爲 reverse(or($$$ = $cur, find($$$, $pre) > 0)) 此公式是爲了判斷當前值如果不是本次或者上次點擊的則隐藏起來。
條件屬性 2:列寬爲 0。
2.5 添加箭頭圖标
找兩個小圖标:
給 B2 單元格添加兩個條件屬性:
條件屬性 1:背景選擇向下的圖片,公式爲:reverse(or(C2 = $cur, find(C2, $pre) > 0))
條件屬性2:背景爲向上的圖片,公式爲:or(C2 = $cur, find(C2, $pre) > 0)
2.6 效果預覽
1)PC端
保存報表,點擊「分頁預覽」,效果如下圖所示:
2)移動端
保存報表,點擊「移動端預覽」,同時支持 APP 端和 H5 端,效果如下圖所示:
3. 模板下載
已完成模板可參見:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Parameter\DynamicCol\動态參數實現二級下拉折疊菜單.cpt
點擊下載模板:動态參數實現二級下拉折疊菜單.cpt
另外附上三級下拉模板,原理同二級下拉一樣,只是父格擴展可能稍微比剛剛的複雜一些。
已完成模板可參見:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Parameter\DynamicCol\動态參數實現三級下拉折疊菜單.cpt
點擊下載模板:動态參數實現三級下拉折疊菜單.cpt
4. 注意事項
1)以上爲内置數據集的方式實現的,如果是使用 Oracle 數據集,可以用select distinct 大類别,小類别 from 表名 ,然後左聯接同一個表,獲取裏面需要的值數據,然後放置到需要的位置,可能需要配置下過濾等,整體的表就可以做出來了。
2)如果需要點擊下拉折疊不是在小三角按鈕上實現,在文字上直接實現,也是可以的,只要更改公式中的 C2 爲當前值 $$$,然後再将本文 B2 動态參數設置在 C2 上即可。
3)其他樣式問題,比如左對齊,框線,字體,自行設置即可。