4. 數據窗口間數據的拷貝
如果需要在數據窗口間共享數據, 應當盡量使用 SHAREDATA() 函數, 但是, SHAREDATA() 函數并不是物理地在數據窗口間拷貝數據, 如果在顯示數據的同時, 還要對數據進行操作, 則需要進行數據的拷貝.
例如, 要求將 DW_1 中選定的行拷貝到 DW_2 中:
在窗口的 OPEN 事件中編程:
dw_1.settransobject(sqlca)
dw_2.settransobject(sqlca)
dw_1.retrieve()
在數據窗口 DW_1 的 ROWFOCUSCHANGED 事件中編寫下列程序:
long lr
lr = dw_1.selectrow(0,false)
lr = dw_1.getrow()
lr = dw_1.selectrow(lr,true)
要完成從 DW_1 到 DW_2 的拷貝工作, 有兩種方法:
第一種:
在按鈕 "拷貝" 的 CLICKED 事件中編程
long lr
lr = dw_1.getselectedrow(0)
dw_1.rowscopy(lr,lr,primary!,dw_2,100,primary!)
執行程序, 利用 POWERBUILDER PROFILER 得出所需時間為 1.7034(百分之一秒)
第二種:
在按鈕 "拷貝" 的 CLICKED 事件中編程
dw_2.object.data = da_1.object.data.selected
執行程序, 利用 POWERBUILDER PROFILER 得出所需時間為 0.8062(百分之一秒)
5. 數據窗口屬性的訪問和修改
A. 數據窗口屬性的訪問
在程序中訪問數據窗口的屬性有下列幾種方法:
A1. 采用點表達式訪問
A2. 應用多個獨立的 DESCRIBE() 函數訪問
A3. 只使用一個 DESCRIBE() 函數, 采用復合參數訪問多個屬性
上面三中方法, 通常第一種方法最慢, 第三種方法最快.
例如:
在窗口的 OPEN 事件中
DW_1.SETTRANSOBJECT(SQLCA)
DW_1.RETRIEVE()
第一種方法:
在檢索按鈕的 CLICKED 事件中編程.
string dx, dy, dh, dw
dx = dw_1.object.da_dh.x
dy = dw_1.object.da_dh.y
dx = dw_1.object.da_dh.height
dy = dw_1.object.da_dh.width
st_1.text =dx+","+dy+","+dh+","+dw
第二種方法:
string dx, dy, dh, dw
dx=dw_1.describe("da_dh.x")
dx=dw_1.describe("da_dh.y")
dx=dw_1.describe("da_dh.height")
dx=dw_1.describe("da_dh.width")
st_1.text =dx+","+dy+","+dh+","+dw
第三種方法:
string dx, dy, dh, dw
st_1.text=dw_1.describe("da_dh.x" +&
"da_dh.y" +&
"da_dh.height" +&
"da_dh.width")
實驗證明, 第三種方法的速度是最快的. 但是程序的可讀性最差.
B. 數據窗口屬性的修改
在程序中修改數據窗口的屬性有下列幾種方法:
A1. 采用點表達式修改
A2. 應用多個獨立的 MODIFY() 函數訪問
A3. 只使用一個 MODIFY() 函數, 采用復合參數訪問多個屬性
上面三種方法, 通常第一種方法最慢, 第三種方法最快.
例如:
在窗口的 OPEN 事件中
DW_1.SETTRANSOBJECT(SQLCA)
DW_1.RETRIEVE()
第一種方法:
在檢索按鈕的 CLICKED 事件中編程.
DW_1.SETREDRAW(FALSE)
dw_1.object.da_dh.x = 18
dw_1.object.da_dh.y = 16
dw_1.object.da_dh.height = 100
dw_1.object.da_dh.width = 200
DW_1.setredraw(true)
st_1.text =dx+","+dy+","+dh+","+dw
第二種方法:
DW_1.SETREDRAW(FALSE)
dw_1.modify("da_dh.x = 18")
dw_1.modify("da_dh.y = 16")
dw_1.modify("da_dh.height = 100")
dw_1.modify("da_dh.width = 200")
dw_1.setredraw(true)
文章來源于領測軟件測試網 http://www.kjueaiud.com/