PowerBuilder 9 中,DataWindow 編輯樣式為 DropDownListBox 的列,調用 Update() 時,若直接取值會獲得 display value(顯示值) 而非 data value(數據值)。需顯式設置數據值。
Data Column 綁定數據列,Display Column 顯示描述,Data Column 存儲代碼。dw_1.GetItemString(row, col) 返回顯示文本(如「男」),而非代碼(如「M」)。在 Update() 前,手動將正確的 data value 寫回 DataWindow 緩衝區:
// 假設列名為 'sex',用戶選擇「男」對應代碼 'M'
dw_1.SetItem(row, 'sex', 'M') // 強制設置 data value
dw_1.Update()
SetItem 直接修改主緩衝區的數據值(data value),Update() 讀取的是主緩衝區值。ItemChanged 事件中攔截並修正:// DataWindow ItemChanged 事件
IF dwo.name = 'sex' THEN
// data 是用戶選擇的 display value,需轉換為對應 data value
CHOOSE CASE data
CASE '男' data = 'M'
CASE '女' data = 'F'
END CHOOSE
RETURN 1 // 返回修正後的 data
END IF
ItemChanged 事件統一處理轉換,保證緩衝區始終存儲 data value。SetItem 修正。Data Column 和 Display Column 正確映射。