我看到你似乎對數據窗口的使用感到困惑。
讓我們試着總結:
- 您創建一個新的DataWindow
d_newrecord
(說這是一個網格)基於SQL選擇你的數據庫,說select id_number, name from employee
。
- 詳細信息數據窗口的區域(將在運行時對每條記錄重複執行,但只有一次設計),需要爲每列放置一個列對象(這裏您將有
id_number
和name
)這些對象既顯示現有數據,又接收用戶輸入以編輯數據和插入新記錄。
- 如果您需要使dw可更新,請不要忘記設置行/更新屬性。
- 標題數據窗口的區域,你可以有一個靜態文本關聯到每列只是在這裏顯示列名稱,它不涉及表數據。
- 在一些窗口對象,你把一個窗口控件
dw_newemployee
在數據窗口的內容將被繪,設置d_newrecord
爲數據對象。
- 你需要在
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