powerbuilder數據窗口編程技巧十則
powerbuilder取得巨大成就的原因就是有datawindow對象,datawindow是具有功能強大和靈活多變的特點,本人用powerbuilder開發過一段時間后,,總結出一些技巧,以供廣大的pb開發者借鑒使用。
一.如何創建一個報表,如下形式
quantity running total
5,000 5,000
2,500 7,500
3,000 10,500
12,000 22,500
對于running total列,我們可使用計算列:cumulativesum(quantity for all),即可達到逐漸遞增求和的功能。
二.數據窗口的數據送緩沖區之前確認的四個步驟 判斷數據類型是否正確。如不正確則觸發itemerror事件。判斷數據是否符合有效性規則。如不符合有效性規則,同樣觸發itemerror事件。 判斷是否有數據被改動。判斷數據是否通過itemchanged事件,如果數據和itemchanged相斥,將觸發itemerror事件。
三.如何在datawindow中用數據類型為datetime的列為條件進行查找
1.當要查找的日期條件是一常數時使用如下表達式:
ls_find = "datetime_col
= datetime ('1/1/1999')"
2.當要查找的日期條件是一個變量時使用如下的表達式:
ls_find = "datetime_col = datetime ('" + ls_date + "')"
3.當要查找的日期條件是一個datetime數據類型時使用如下表達式:
ls_find = "datetime_col = datetime ('" + string (ldt_datetime) + "')"
四.設置數據窗口boolean型屬性的三種方法
powerbuilder提供了三種方法設置數據窗口的布爾型屬性,分別是true/false, 1/0, 'yes'/'no'。例如:
dw_1.object.address.visible = 0 dw_1.object.address.visible = false dw_1.object.address.visible = 'no'
powerbuilder在處理上以字符串的形式保存屬性,而不考慮屬性值是布爾型、長整型或是字符型。
為了進一步理解,可以導出一個數據窗口并查看它的原碼,可以發現即使是列的顏色屬性它也是使用帶雙引
號的數字來表達。
五.如何在datawindow中快速刪除多行
在開發過程中可能經常有要進行多行刪除的操作,一般都使用循環語句進行操作:
for ll_rowon = 1 to dw_1.rowcount() dw_1.deleterow(ll_rowon) next
一個快速的刪除方法是把要刪除的行從主緩沖區中移到刪除緩沖區中。例如,刪除緩沖區中所有的行:
dw_1.rowsmove(dw_1, 1, dw_1.rowcount, primary!, dw_1, 1, delete!)
不過不要忘了過濾的行在不同的緩沖區中。
六.如何在datawindow的sql語法中不使用select distinct實現刪除重復的行
起先對你要顯示唯一值的列進行排序:"city a",然后增加如下過濾字符串:" city < > city [-1] or getrow () = 1"
七.如何在分組形式的datawindow中分別顯示各組的行號
當我們為datawindow的每一行顯示行號時,可以簡單的放一個表達式為getrow()計算列。但是對于分組的datawindow,要分別顯示各組的行號,則應使用表達式為
getrow() - first(getrow() for group 1) + 1的計算列。
八.如何改變列的字體顏色,提醒用戶此列已做修改
在列的color屬性中,輸入如下表達式
if (column_name < >column_name.original, rgb(255, 0, 0), rgb(0, 0, 0))。
在這個條件中,如果此列已改變,則顯示紅色字體,否則顯示黑色字體。這個表達式主要用column_name < > column_name.original比較當前列的值和原始列的值是否相同來達到判斷的目的。
九.在數據窗口中移走行,但不是去做過濾或刪除操作
rowsdiscard()函數可做到這一點,它在數據窗口中執行移除工作,但被移走的行它不可被刪除或做任何修改性的保存。
十.如何在多行顯示的datawindow 中的footer band中顯示當前數據的首行和最后行的行號
我們先看兩個計算列的表達式: if (getrow() = first(getrow() for page), 1, 0) // 1 為當前頁的第一行
if (getrow() < > 1 and getrow() = last(getrow() for page), 1, 0) // 1 為當前頁的最后一行
由上面可知,在footer band中設置如下計算列表達式:
'rows ' + string(first(getrow() for page)) + ' to ' + string(last(getrow() for page)) + ' are displayed'。
即可達到這項功能。