PowerBuilder資料視窗程式設計技巧十則

hurcn發表於2007-08-13

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'

  即可達到這項功能。

 

 

 

 

相關文章