1.概述
1.1 問題描述
儲存格里新增的 下拉樹元件 ,資料字典設定了實際值和顯示值,選擇時顯示的是顯示值,在失焦後儲存格中顯示的會是實際值。
例如下圖用下拉樹展示部門結構,選項的實際值為部門 ID,顯示值為部門名稱,可以看到失焦後,下拉樹框裏面變為實際值。
那如何讓其失焦後仍然顯示為顯示值並且可以提交入庫呢?
1.2 原因分析
下拉樹的回傳值是一個陣列,但如果傳回了完整路徑,則形態在轉化實際值為顯示值時,會將每個節點的完整路徑視為一個字串整體去匹配資料,所以就無法匹配到相應的顯示值了。
1.3 解決思路
儲存格「形態>資料字典」設定實際值和顯示值的對應關係,這樣可以實現失焦後最終顯示成顯示值。在填報屬性中用 MAPARRAY() 和 VALUE() 函式實現對實際值的轉換入庫。
2. 範例
2.1 準備資料
1)建立一張普通報表,新增資料集 ds1,SQL 語句為:SELECT * FROM 公司部門
2)接着新增樹資料集 tree1,選擇剛才的 ds1,如下圖設定:
2.2 新增下拉樹
在 A1 儲存格新增一個下拉樹元件,資料字典構建方式選擇 自動構建,實際值為部門 ID,顯示值為部門名稱。設定成多選和不傳回完整路徑。如下圖所示:
2.3 儲存格形態設定
選中 A1 儲存格,在「儲存格屬性>形態」選擇資料字典,綁定 ds1 資料集,實際值為部門ID,顯示值為部門名稱。
2.4 填報屬性設定
如上設定後失焦顯示的已經是顯示值了,但此時提交入庫綁定儲存格獲取的值,仍然是實際值。此處可以利用公式來處理:maparray(A1,value("ds1","部門名稱","部門ID",item)),其中 maparray 函式用來建立陣列,透過 VALUE函式 在新陣列中列出和 A1 儲存格中部門ID 一一對應的部門名稱。
如果需要對結果進行連結,以字串的形式儲存到資料庫,可以在公式中加一個字串連結函式 JOINARRY:JOINARRAY(maparray(A1,value('ds1','部門名稱','部門ID',item)),',')
2.5 效果預覽
3. 範本下載
點選下載範本:儲存格下拉樹傳回顯示值.cpt