DataWindow 是 PowerBuilder (PB) 獨有的專利控制項,能以極簡潔的方式處理資料呈現、報表列印、複雜巢狀報表等需求。其核心機制為:依顯示需求設計資料來源,執行時將資料從伺服器下載至客戶端緩衝區處理,最後再 Commit 或 Rollback 寫回資料庫。此架構大幅降低網路傳輸量,提升處理速度。
| 緩衝區 | 用途 |
|---|---|
| Primary Buffer | 儲存一般新增、修改的記錄 |
| Deleted Buffer | 儲存被刪除的記錄 |
| Filter Buffer | 儲存被過濾隱藏的記錄 |
| Sort Buffer | 儲存排序後的記錄 |
使用者在編輯控制項輸入資料時,內容暫存于浮動編輯框,離開欄位後才經驗證寫入 Primary Buffer。若使用者修改一筆資料直接關閉視窗,ModifiedCount() 會傳回 0,導致未提示儲存。解決方法:在關閉視窗或儲存前的程式碼段加入 AcceptText(),強制將浮動編輯框資料寫入緩衝區。
配合 DataWindow 畫面中將 NOT NULL 欄位設為 Required 屬性,可在儲存前呼叫 FindRequired() 掃描所有必填且未輸入的欄位,回傳行號與欄位名,方便提示使用者補齊。範例邏輯:
long row = 1
integer colnbr = 0
string colname
mle_required.Text = ""
DO WHILE row <> 0
colnbr++
IF dw_1.FindRequired(Primary!, row, colnbr, colname, FALSE) < 0 THEN EXIT
IF row <> 0 THEN
mle_required.Text += String(row) + "~t" + colname + "~r~n"
END IF
LOOP
透過 DataWindow 運算式動態設定字體顏色、背景色或 Protect 屬性,可實現:
此作法不佔用額外系統資源,且符合使用者視覺習慣。
熟練掌握 DataWindow 緩衝區機制、AcceptText/FindRequired 等核心函數,並善用動態屬性控制資料呈現,能事半功倍地開發高效能、易維護的 PB 應用程式。