PB資料視窗物件之資訊獲取

2021-06-22 15:11:56 字數 3066 閱讀 3732

〓獲取資料視窗資訊

※函式describe

使用函式describe可以獲取資料視窗物件中的資訊。該函式語法是:

dwcontrol.describe(propertylist)

其中,dwcontrol是資料視窗控制項名稱,propertylist是以空格分隔的特性或運算表示式列表,它用來報告列與圖形物件的屬性值。表示式可以用特定行與列的值進行運算。describe函式返回的是乙個字串,該字串是對指定屬性的描述,不同的屬性占用不同的行(不同屬性用~n分隔)。如果有無效屬性則返回該屬性之前的屬性取值和乙個驚嘆號(!)。如果某個屬性沒有值,則返回乙個問號(?)。

如:dw_1.describe("datawindow.bands datawindow.objects")

header~tdetail~tsummary~tfooter~nemp_id~temp_id

dw_1.describe("datawindow.band datawindow.objects")

!dw_1.describe("datawindow.bands datawindow.object")

header~tdetail~tsummary~tfooter!

如果特性值容易引起混淆,例如,帶有感嘆號、問號、tab鍵或換行符,這些符號在返回字串中將用引號括起來。為了測試這種情況,先給資料視窗中的標籤name_t中輸入內容為name?,然後使用下面的語句:

dw_1.describe("name_t.text")

上面的語句顯示"name?",這是因為如果值列表中的第乙個值用引號引著,那麼該特性列表中的剩餘值也用引號引著。

*標籤name_t和addr_t中分別輸入內容為name?和

zjhz

dw_1.describe("name_t.text addr_t.text")-------"name?" zjhz

dw_1.describe("addr_t.text name_t.text")-------zjhz "name?"

*最後不顯示空格(~n) ※

對列的引用

在屬性描述時,經常要對列進行引用。引用列的方法有兩種,或者使用列名,或者使用列號。應盡量避免使用列號,因為列號是和建立資料視窗時選擇欄位的順序相對應的。在以後的修改中很有可能取消某些字段或者調整欄位的選擇順序,或者改變資料來源,這時就很容易出現錯誤,更糟糕的是這時很有可能沒有錯誤資訊,張冠李戴了。

下面是乙個使用列號進行屬性描述的語句:

dw_1.describe("#5.coltype")

這種語法可以和函式getcolumn搭配使用,用來檢索當前列號。下面是乙個顯示資料視窗中所有字段型別的例程:

integer li_count,li_index

li_count = integer(dw_1.describe("datawindow.column.count"))

for li_index = 1 to li_count

messagebox(string(li_index),dw_1.describe("#" + string(li_index) +"coltype"))

next

※函式evaluate

在使用describe描述資料視窗物件中的相關資訊時,有乙個非常重要的函式不能不掌握,就是evaluate。雖然函式describe可以獲取物件的資訊,但是表示式的取值就不能正常讀取了,而這又是經常遇到的。所以,函式evaluate非常重要,它可以使函式describe獲取表示式的取值。該函式的語法是:

evalute('expression',rowno)

其中,expression是屬性表示式,rowno是要描述的行號。該函式放置在describe的屬性列表中。例如,判斷第3行的salary工資是否大於1000,如果大於則返回1,否則返回0,

可以使用下面的語句:

dw_1.describe("evaluate('if(salary > 1000,1,0)',3)")

而使用下面的語法就是錯誤的:

dw_1.describe("if(salary > 1000,1,0)")

*單行(如第二行

)dw_1.describe("evaluate('if(isnull(emp_no) or emp_no ='',~~'*~~',emp_no)',2)")

*多行long ll_i

string ls_emp

for ll_i = 1 to dw_1.rowcount()

ls_emp = dw_1.describe("evaluate('if(isnull(emp_no),~~'null~~',emp_no)',"+ string(ll_i) + ")")

dw_1.setitem(ll_i,'emp_no',ls_emp)

next

※函式lookupdisplay

字段使用了下拉列表框、下拉資料視窗和單選按鈕等有**表的編輯風格時,在資料視窗控制項上顯示的值和字段實際得到的值並不相同,使用函式getitemx只能讀取這樣的字段的真實取值,而不是使用者看到的值。如何才能讀取使用者看到的值?可以使用函式lookupdisplay。

lookupdisplay

函式不能直接從powerscript呼叫,可以在describe和evaluate函式配合使用。因為函式lookupdisplay不能指定對哪行資料進行操作,它的引數只有乙個欄位名稱,所以必須和evaluate函式配合使用。該函式的語法是:

lookupdisplay(columnname)

其中,引數columnname是字段的名稱,而不是乙個字串。函式執行錯誤則返回空字串。

下面是乙個和函式getitemstring相比較的例子。假設在乙個資料視窗中定義字段***的編輯風格為dropdownlistbox,定義該欄位使用編碼表,編碼表的定義是顯示值「male」,「female」分別對應「男」和「女」。然後,在某個按鈕的clicked事件中編寫如下指令碼:

messagebox("getitemstring:"+dw_1.getitemstring(1,"***"),"lookupdispaly:"+dw_1.describe("evaluate('lookupdisplay(***)',1)"))

::getitemstring:男

::lookupdisplay:male

PB資料視窗物件之顯示樣式

資料視窗物件顯示樣式有11種 grid tabular group freefrom label n up crosstab graph composite richtext ole2.0 grid 字段橫向排列在detail band中,標籤橫向排列在headerband中,和字段相對應,欄位和字...

PB資料視窗物件之資料來源

pb提供5種資料來源 quickselect 快速選擇型別 sql select sql選擇型別 query 查詢型別 external 外部型別 和storedprocedure 儲存過程型別 quick select 只能從乙個資料表或者檢視中選取資料 無關聯的表或者檢視 sql select ...

PB資料視窗物件之畫板 band和層次

資料視窗畫板 整個資料視窗畫板由6個視窗構成,分別是 design 設計資料視窗物件視窗,可以使用選單design options來改變design視窗的外觀 preview 預覽資料視窗的外觀,顯示相應表中的對應的資料,及對資料的各種操作 control list 資料視窗中所有的部件構成的乙個列...