行のデータによってドロップダウンデータウィンドウのフィルター条件を変更する

PowerBuilder Tips

方法

ドロップダウンデータウィンドウ (DDDW) は GetChild 関数によって参照を取得でき、取得した DDDW に対して SetFilter、Filter 関数を呼び出すことで DDDW 内のデータにフィルターをかけることが可能です。

行ごとに異なるフィルター条件を適用するためには、DDDW カラムにフォーカスが移動した際に現在行のデータを取得し、その値によって条件を変更します。

フォーカスの移動は ItemFocusChanged イベントで検出します。

【例】DDDW カラム (sub_category) のリストを他のカラム (category) の値で絞り込む

[データウィンドウの ItemFocusChanged イベント]

string ls_category
string ls_filter
datawindowchild ldwc_subcat

// DDDW カラム (sub_category) にフォーカスが移動したとき
// リストの内容を category で絞り込む
IF dwo.name = "sub_category" THEN
    
    // DDDW を取得
    this.GetChild("sub_category", ldwc_subcat)

    // 他のカラムの値からフィルター式を生成
    ls_category = this.GetItemString(GetRow(), "category")

    IF IsNull(ls_category) or ls_category = "" THEN
        // 値が未入力の場合はフィルターを解除
        ls_filter = ""
    ELSE
        ls_filter = "category='" + String(ls_category) +"'"
    END IF

    // フィルターを設定
    ldwc_subcat.SetFilter(ls_filter)
    ldwc_subcat.Filter()
    
    // DDDW をソート (ソート条件はデータウィンドウで設定済み)
    ldwc_subcat.Sort()

END IF

 

Tips情報

プロダクト :PowerBuilder

バージョン :2017R3

Tips 一覧を見る
PowerBuilder マイグレーション
PowerBuilder学習、動画で始めちゃう?