http://4shiun.blogspot.tw/2013/01/tiptop.html
在 Genero Studio 設計 ComboBox 下拉式選單的時候,
通常都是直接在 4fd 檔上面定義固定的 item 項目。
然後再到 p_perlang 修改多國語言顯示的名稱。
提供一個方式可以讓 ComboBox 物件可以隨著其他欄位的變化,來改變下拉式選單的項目。
就是用 ui.ComboBox 的方法。
參考 Genero 的說明文件,ui.ComboBox 提供下式的 Function。
CLASS Method:
1. forname :物件名稱
2. setDefaultInitializer:設定初始的項目
OBJECT Method:
1. addItem(name,text) :增加項目,name 是值,text 是顯示名稱
2. getColumnName():回傳欄位的名稱
3. getIndexOf(name):回傳 name 是在項目的第幾個,沒有回傳 0
4. getItemCount():回傳項目的數量
5. getItemName(index):回傳第 index 個的項目 name 值
6. getItemText(index):回傳第 index 個的項目 text 值
7. getTableName():回傳欄位的 table_name 或是 FORMONLY
8. getTag():回傳欄位的 tag 值
9. getTextOf(name) :回傳 name 是在項目的第幾個的 text 值,沒有回傳 null
10. removeItem(name):刪除名稱是 name 的項目
11. clear():清除所有的項目
範例1:ComboBox 依開啟時可以顯示 1~5 的項目選單
方法1:
1. 在 4fd 檔中的 ComboBox 欄位 Initializer 屬性加上 cb_load 字串
2. 在 4gl 檔中增加一個 Function
FUNCTION cb_load(combox)
DEFINE combox ui.ComboBox
LET combox = ui.ComboBox.forname("ima12")
CALL combox.clear()
FOR g_num = 1 TO 5
CALL combox.addItem(g_num ,g_num)
END FOR
END FUNCTION
方法2:
1. 在 OPEN WINDOW 之前加上:
CALL ui.ComboBox.setDefaultInitializer("cb_load")
2. 同上增加 cb_load 的 Function
範例2:ComboBox 可以隨著某個欄位所選擇的,列出對應的選單
1. 新增 cb_load 的 Function
FUNCTION cb_load(combox)
DEFINE combox ui.ComboBox
DEFINE l_azf01 LIKE azf_file.azf01,
l_azf03 LIKE azf_file.azf03
LET combox = ui.ComboBox.forname("ima12")
DECLARE ima12 CURSOR FOR
SELECT azf01,azf03 FROM azf_file
WHERE azf02 = g_ima.ima12
FOREACH ima12 INTO l_azf01,l_azf03
CALL combox.addItem( l_azf01,l_azf03)
END FOREACH
END FUNCTION
2. 然後再 INPUT 段的 BEFORE FIELD 欄位的時候,呼叫就可以變化了
BEFORE FIELD ima12
CALL cb_load("")
當欄位 ima12 選擇是那一個的時候,跳到 ComboxBox 欄位的時候,
就會帶出不同的下拉式選單
總結:在 Genero 的 ComboBox 有一些可惜的地方,只能在查詢的時候才能夠輸入資料
(要開啟 queryEditabile ),不能提供新增的時候可以輸入選單以外的值。
再來就是如果是用此方式的話,多國語言的功能就不能再維護了,
如果是帶 Table 的資料多國語言就沒問題,但是是自定的話,當然也可以用 p_ze 來定義啦~~~
要注意的另一點,如果下拉式選單因其他欄位的變化而造成值是相同但是顯示的名稱不同,
再查詢的時候就要再多判斷要帶出來的顯示名稱,並上下筆做查詢的時候也要判斷。
沒有留言:
張貼留言