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

2021-04-13 06:42:33 字數 2569 閱讀 4060

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.row**ove(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'

即可達到這項功能。

PowerBuilder支援的標準資料型別

power builder 支援的標準資料型別有以下14種 1 blob型別 用來描述大的二進位制物件,可儲存海量資料 如圖象 大文字等 2 boolean型別 布林型別,包括真 true 和假 false 兩種值。3 integer 或 int型別 16位帶符號整數。值域為 32768 32767...

powerbuilder日期函式

pb系統函式 之 日期時間函式day 功能得到日期型資料中的號數 1到31之間的整數值 語法day date 引數date 要得到號數的日期值返回值 integer。函式執行成功時返回號數 1到31之間的整數值 如果date引數的值為null,則day 函式返回null。dayname 功能得到指定...

PowerBuilder常用技巧

1 怎樣對分組裡的行加上序號,要求每個組裡行的序號從1開始!datawindow物件,用計算域 做分組組號 cumulativesum if 分組列名 1 分組列名 0 0,1 for all 做組內編號 getrow first getrow for group 1 1 2 去掉分組資料視窗的分頁...