第三種方法:
dw_1.modify("da_dh.x=18" +&
"da_dh.y=16" +&
"da_dh.height=100" +&
"da_dh.width=200")
6. 數據窗口中數據的訪問
在程序中, 經常會需要動態的修改數據窗口中的數據. 對此, PB 提供了多種方法, 各種方法在性能上會有一些差異.
A. 數據窗口中數據的訪問
目的: 將數據窗口中的電話號碼存放在一個數組中.請比較下面兩中方法.
方法一:
string da_dh[]
long ll,i
ll = dw_1.rowcount()
for i = ll to 1 stet -1
da_dh[i] = dw_1.getitemstring(i,"dhhm")
next
方法二:
string da_dh[]
da_dh[] = dw_1.object.dhhm.current
測試發現, 第二種方法比第一種方法快將近一倍. 數據量越大這種差異越明顯.
B. 數據窗口中數據的修改
目的: 修改數據窗口中的電話號碼列的值.
請比較下面兩中方法.
方法一:
dw_1.setitem(i,"dhhm",l_name)
方法二:
dw_1.object.name[i] = l_name
測試發現, 第二種方法比第一種方法快將近一倍. 數據量越大這種差異越明顯.
7. 數據窗口事件對性能的影響
對于數據窗口控制中經常發生的事件, 應當盡量減少其中的程序代碼. 特別是如下事件:
a. itemchanged
b. editchanged
c. itemfocuschanged
d. pbm_dwnkey
e. rowfocuschanged
f. retrieverow
在這些事件中的任何處理程序, 都會降低應用程序的處理速度. 所以應當盡量減少這些事件中的處理程序, 必要時, 可以考慮只將重要的代碼放在這些事件中, 而將剩余的代碼放在一個傳遞的事件中.
例如,如果需要用到數據窗口的 ROWFOCUSCHANGED 事件,可以為數據窗口定義一用戶事件 "UE_RE",而在數據窗口的 ROWFOCUSCHANGED 事件中寫如下代碼:
PARENT.postevent("ue_re")
在 UE_RE 事件中再編寫相應的程序代碼,如:
string code
dw_1.selectrow(0,false)
dw_1.selectrow(rownum,true)
code = getitemstring(dw_1,rownum,"dhhm")
dw_2.retrieve(code)
另外, 為了獲得當前行號,應盡量使用數據窗口的 CURRENTROW 變量,而少用 GETROW() 函數。
8. 數據窗口的列名稱與列編號
對數據窗口的某列進行訪問, 可以采用該列的名稱, 也可以使用該列的編號。
例如:
采用列編號:
dw_1.object.data[ll_row,2]
dw_1.getitemstring(3,2)
采用列名稱表示某列:
dw_1.object.article_text[ll_row]
dw_1.getitemstring(3,"dhhm")
dw_1.setitem(3,"date",1999-03-31)
...
對于以上兩種方法,如果只進行一次查詢,在速度上并沒有太大的區別,如果需要循環訪問數據窗口上的某一列,則速度上的差異就表現的比較明顯,采用第一種方法要快, 但是程序的可讀性比較差。但是,在使用函數時(如 GETITEM() 和 setitem() ), 執行速度往往沒有很大差別。
9. 計算域
數據窗口的計算域會對數據的操作性能產生影響。 如果數據窗口中包含許多復雜的計算域,將嚴重影響數據窗口的執行速度。
文章來源于領測軟件測試網 http://www.kjueaiud.com/