2012-08-10 48 views
2

我正在使用PowerBuilder classic 12.5 在插入,編輯,創建和打印報告時遇到困難。如何爲itemchanged事件和數據窗口編碼

我有一個數據窗口,dw_NewEmployee與數據對象,d_newrecord這是可更新。

  1. 我應該使用的列通過列插入記錄或我 創建窗口對象的單行文本
  2. 是對單行文本數據對象或 在列和行使用的itemchanged事件.. 。我無法弄清楚如何實現驗證規則。 請給我一個例子來驗證員工ID_Number

回答

4

我看到你似乎對數據窗口的使用感到困惑。

讓我們試着總結:

  1. 您創建一個新的DataWindow d_newrecord(說這是一個網格)基於SQL選擇你的數據庫,說select id_number, name from employee
  2. 詳細信息數據窗口的區域(將在運行時對每條記錄重複執行,但只有一次設計),需要爲每列放置一個列對象(這裏您將有id_numbername)這些對象既顯示現有數據,又接收用戶輸入以編輯數據和插入新記錄。
  3. 如果您需要使dw可更新,請不要忘記設置行/更新屬性。
  4. 標題數據窗口的區域,你可以有一個靜態文本關聯到每列只是在這裏顯示列名稱,它不涉及表數據。
  5. 在一些窗口對象,你把一個窗口控件dw_newemployee在數據窗口的內容將被繪,設置d_newrecord數據對象
  6. 你需要在open()事件窗口設置在某一時刻DW的交易對象,例如:
dw_newemployee.SetTransObject(sqlca) 
dw_newemployee.Retreive() //if you are using some retreival arguments, don't forget to include them here 

當你想在你的表中插入新的數據(例如與一個窗口按鈕「添加」),在clicked()事件的按鈕中,您可以調用dw_newemployee.InsertRow(0)在最後插入。

ItemChanged()事件將在一個單元格被修改後觸發,您將得到行,item(一個dwobject)和新的數據。通過選擇事件的返回值,您可以接受或拒絕新數據。

下面是在itemchanged()事件字段有效性的一個示例:

long ll_return_code = 0 
string ls_column 
ls_column = lower(dwo.name) 
choose case ls_column 
    case "id_number" 
     if long(data) = 42 THEN 
      messagebox("validation error", "You cannot use 42 for the ID") 
      ll_return_code = 1 //reject and stay in cell 
     end if 
    case "name" 
     if data = "foobar" then 
      messagebox("validation error", "Do not use dummy value...") 
      ll_return_code = 2 //reject but allow to go elsewhere 
     end if 
end choose 

return ll_return_code