PB中協調多數據窗口數據操縱的一種解決方法

PB中協調多數據窗口數據操縱的一種解決方法

(加入日期:2001-9-23)

保存文章至硬盤】【打印文章】【字體:

分享到: 0
華僑大學計算機系 潘孝銘 徐麗莉  

1、問題的提出
數據窗口是Power Builder中檢索、表現和操縱數據的對象。如果一個數據表的列不多,用單數據窗口操縱數據很易實現,但在實際應用中,數據表的列數動輒幾十,甚至上百也並不少見,這時用單數據窗口滾動顯然不方便,一個自然的想法是採用TAB控件和TAB頁,在每個TAB頁上放置一個數據窗口控件,每個數據窗口控件分門別類操縱數據表的列,但隨之而來的問題是如何協調分佈在這些數據窗口中錄入或修改數據的存儲,針對每個數據窗口發佈一個UPDATE()函數的調用不可行。我們在實際開發中經過探索,增加一個後臺的數據窗口做中介,解決了多數據窗口操縱數據的問題。

2、協調多數據窗口數據操縱的一種解決方法
基本思路是:在進行數據操縱的數據窗口控件之外,另外放置一個數據窗口控件,設置其不可見,並設其數據窗口對象爲一個選擇了數據表中所有列的數據窗口,其他數據窗口控件中錄入或修改的數據實時地傳送過來,對該控件的數據進行更新操作即可。
不失一般性,下面以POWERBUILDER自帶數據庫psDemoDB.db中的customer表的數據錄入爲例來說明。
Customer表有"id","fname","lname","address","city","state","zip","phone","company"九個列,其中"id"爲integer類型,其餘均爲char類型。
(1)創建數據窗口
建立三個數據窗口d_1、d_2、d_3,數據窗口d_1選"id","fname","lname"三列,d_2中選"address","city","state"三列,d_3選"zip",""phone","company_name"三列。再建立數據窗口d_4,選中數據表中的所有列。
(2)建TAB控件和TAB頁
建立一個TAB控件tab_1,建立三個TAB頁tabpage_1、tabpage_2、tabpage_3。
(3)建數據窗口控件
在(2)中建的三個TAB頁中分別放置dw_1、dw_2、dw_3三個數據窗口控件,設其數據窗口對象分別爲d_1、d_2、d_3。
另外,在窗口中放置一個數據窗口控件dw_4,不選其"visible"屬性.
(4)編寫代碼
在tabb1.tab_page_1.dw_1的editchanged事件中編寫代碼如下:
//代碼由此開始
//設置變量,id_value存放數據表中id列的值
int i_m,i_n,id_value  
string str_fname,str_lname
//取dw_1當前的行數
i_m=tab_1.tabpage_1.dw_1.getrow()  
//取dw_4當前的行數
i_n=dw_4.getrow()  

//tab_1.tabpage_1.dw_1及dw_4接收浮在數據窗口控件表面的數據
tab_1.tabpage_1.dw_1.accepttext()
dw_4.accepttext()

//取dw_1中的"id"列的值給變量id_value
id_value=tab_1.tabpage_1.dw_1.getitemnumber(i_m,"id")  
//將變量id_value的值賦給dw_4中"id"列  
dw_4.setitem(i_n,"id",id_value)  

//取dw_1中的"fname"列的值給變量str_fname
str_fname=tab_1.tabpage_1.dw_1.getitemstring(i_m,"fname")  
//將變量str_fname的值賦給dw_4中"fname"列
dw_4.setitem(i_n,"fname",str_fname)  

//取dw_1中的"lname"列的值給變量str_lname
str_lname=tab_1.tabpage_1.dw_1.getitemstring(i_m,"lname")  
//將變量str_lname的值賦給dw_4中"lname"列
dw_4.setitem(i_n,"lname",str_lname)  
//代碼到此結束

tab1.tab_page_2.dw_2、tab1.tab_page_3.dw_3的editchanged事件代碼可比照tab1.tab_page_1.dw_1的editchanged事件代碼編寫,從略。
程序在PB65和PB7中調試通過,程序運行時,無論新增數據,還是對dw_1、dw_2、dw_3中的數據列進行修改,數據都實時地傳送給dw_4,只需對dw_4進行保存或更新操作,從而解決了多數據窗口數據操縱的協調問題。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章