首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

PowerBuilder 9 DataWindow DropDownListBox 更新時取到 display value 而非 data value

     編輯:程式設計疑難解答

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()

原理

  • DropDownListBox 編輯時,DataWindow 內部保存的是 display value 以便顯示。
  • 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

最佳實踐

  1. 優先在 ItemChanged 事件統一處理轉換,保證緩衝區始終存儲 data value。
  2. 若無法在事件處理,更新前批量 SetItem 修正。
  3. 定義 DropDownListBox 時,確保 Data Column 和 Display Column 正確映射。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved