在 SingleLineEdit 輸入時動態過濾 datawindow 中的資料
假設有個 Window :: w_main
裡面有兩個物件 SingleLineEdit :: sle_id 和 DataWindow :: dw_1
dw_1裡面有 兩個欄位 id 和 name
先對 sle_id 新增自訂事件: ue_keyup,event id請選 pbm_keyup 。
然後在 ue_keyup 中加入
這樣你就可以即時過濾 dw_1 裡面的資料了。
簡單吧?
說明:
SingleLineEdit本身只有對 text 欄位變更的事件反應,也就是 modified 事件,如果你需要對 keyboard 進行偵測,那有兩個事件適合使用 pbm_keydown、pbm_keyup,但不幸的是SingleLineEdit 找不到此事件,因此必須自訂增加。
鍵盤的按鍵 按下 、放開 對應的就是 pbm_keydown、pbm_keyup
至於為何不選 pbm_keydown 而使用 pbm_keyup 的原因在於 keyboard 觸發 keydown 時並未將字元放到 text 屬性中,因此你僅能從 keydown 事件的參數 key 中取得使用者按下的 key鈕,更不幸的是,該 key 參數使用的是 Enumerated 列舉無法直接轉字元,所以判斷寫起來會太複雜。
然而 keyup 事件則是在字元被寫入 text 屬性後觸發的事件,因此你可以輕易的從 SingleLineEdit 的 text 屬性中取得輸入的字串。
利用此字串你就可以製作過濾條件,然後就可以對 dw_1 進行過濾了。
裡面有兩個物件 SingleLineEdit :: sle_id 和 DataWindow :: dw_1
dw_1裡面有 兩個欄位 id 和 name
先對 sle_id 新增自訂事件: ue_keyup,event id請選 pbm_keyup 。
然後在 ue_keyup 中加入
String ls_id ,ls_filter
ls_id = This.Text
ls_filter = 'id like ~'' + ls_id + '%~''
dw_1.SetFilter(ls_filter)
dw_1.Filter()
這樣你就可以即時過濾 dw_1 裡面的資料了。
簡單吧?
說明:
SingleLineEdit本身只有對 text 欄位變更的事件反應,也就是 modified 事件,如果你需要對 keyboard 進行偵測,那有兩個事件適合使用 pbm_keydown、pbm_keyup,但不幸的是SingleLineEdit 找不到此事件,因此必須自訂增加。
鍵盤的按鍵 按下 、放開 對應的就是 pbm_keydown、pbm_keyup
至於為何不選 pbm_keydown 而使用 pbm_keyup 的原因在於 keyboard 觸發 keydown 時並未將字元放到 text 屬性中,因此你僅能從 keydown 事件的參數 key 中取得使用者按下的 key鈕,更不幸的是,該 key 參數使用的是 Enumerated 列舉無法直接轉字元,所以判斷寫起來會太複雜。
然而 keyup 事件則是在字元被寫入 text 屬性後觸發的事件,因此你可以輕易的從 SingleLineEdit 的 text 屬性中取得輸入的字串。
利用此字串你就可以製作過濾條件,然後就可以對 dw_1 進行過濾了。
留言