999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

數(shù)據(jù)窗口顯示欄目通用定制窗口的設(shè)計及應(yīng)用

2010-09-11 09:54:30婁七明楊波李穎芳
紅河學(xué)院學(xué)報 2010年4期
關(guān)鍵詞:設(shè)置方法設(shè)計

婁七明,楊波,李穎芳

(紅河學(xué)院工學(xué)院,云南蒙自661100)

數(shù)據(jù)窗口顯示欄目通用定制窗口的設(shè)計及應(yīng)用

婁七明,楊波,李穎芳

(紅河學(xué)院工學(xué)院,云南蒙自661100)

首先討論了PowerBuilder中如何根據(jù)用戶需求實(shí)現(xiàn)數(shù)據(jù)窗口中顯示列的動態(tài)控制方法,然后結(jié)合實(shí)例設(shè)計了一個界面友好、通用的數(shù)據(jù)窗口顯示欄目定制窗口。

PowerBuilder;數(shù)據(jù)窗口;數(shù)據(jù)存儲;信息系統(tǒng)

通常一個信息系統(tǒng)的用戶來自不同的工作崗位和工作部門,這些用戶在查詢信息或制作報表時的需求也不盡相同。這就要求開發(fā)人員必須為信息系統(tǒng)提供一些可定制的功能,比如可以任意設(shè)置窗口中要顯示的欄目,任意調(diào)整這些欄目的顯示順序。

PowerBuilder是一個非常優(yōu)秀的基于數(shù)據(jù)庫的應(yīng)用程序開發(fā)工具,其數(shù)據(jù)的編輯、查詢等都可以使用數(shù)據(jù)窗口來完成。本文首先就如何控制數(shù)據(jù)窗口中列顯示與否的相關(guān)技術(shù)進(jìn)行了探討,然后設(shè)計了一個通用的數(shù)據(jù)窗口顯示欄目定制窗口,很好的解決了上面的問題。

1 數(shù)據(jù)窗口中字段的顯示控制技術(shù)[1,2]

通常,控制數(shù)據(jù)窗口中的列是否顯示,有以下三種方法。

方法一:修改數(shù)據(jù)窗口對象SQL語句的SELECT子句,把要顯示的列加入,不顯示的列刪除,以建立新的查詢語句,重新從數(shù)據(jù)庫檢索數(shù)據(jù),從而實(shí)現(xiàn)列的顯示定制。采用這種方法分如下三個步驟:

①獲得數(shù)據(jù)窗口對象的SQL代碼,可以使用GetSQLSelect方法來實(shí)現(xiàn),語法如下:

strsql=dwcontrol.GetSQLSelect()

②對獲得的SQL代碼(變量strsql中)進(jìn)行相應(yīng)的修改,修改后和相應(yīng)數(shù)據(jù)窗口對象進(jìn)行綁定,可以使用SetSQLSelect方法實(shí)現(xiàn),語法如下:

dwcontrol.SetSQLSelect(strsql)

③使用Retrieve方法重新檢索數(shù)據(jù)。

這種方法一方面必須從數(shù)據(jù)庫重新檢索數(shù)據(jù),效率較低;另一方面要保證數(shù)據(jù)窗口中各列的顯示屬性相同,需要編寫大量的代碼,且代碼的通用性較差。

方法二:通過設(shè)置數(shù)據(jù)窗口對象的列及其標(biāo)題的visible屬性來實(shí)現(xiàn)[3]。需顯示的列及其標(biāo)題的visible屬性設(shè)置為true,不需顯示的列及其標(biāo)題的visible屬性設(shè)置為false。可以使用modify方法實(shí)現(xiàn),語法格式如下:

dwcontrol.modify(c_name+’_t.visible=true’)//設(shè)置列標(biāo)題可見

dwcontrol.modify(c_name+’.visible=true’)//設(shè)置列可見

dwcontrol.modify(c_name+’_t.visible=false’)//設(shè)置列標(biāo)題不可見

dwcontrol.modify(c_name+’.visible=true’)//設(shè)置列不可見

采用這種方法不需要從數(shù)據(jù)庫重新檢索數(shù)據(jù),效率較高,但是會打亂數(shù)據(jù)窗口對象中列的顯示順序,尤其是當(dāng)設(shè)置數(shù)據(jù)窗口對象中包含第一列在內(nèi)的數(shù)列不可見時,將會出現(xiàn)一些空位,很難控制。

方法三:通過設(shè)置數(shù)據(jù)窗口對象列的width屬性來實(shí)現(xiàn)。修改不需要顯示列的width屬性值為0,其他字段的width屬性不變,可以使用modify方法實(shí)現(xiàn),語法格式如下:

dwcontrol.modify(c_name+’.width=’+string (wid))//設(shè)置列的寬度為wid

使用這種方法不需要從數(shù)據(jù)庫重新檢索數(shù)據(jù),效率較高,因而在應(yīng)用程序中經(jīng)常被使用。下面將結(jié)合這種方法,設(shè)計一個通用的數(shù)據(jù)窗口顯示欄目定制窗口。

圖1 數(shù)據(jù)窗口d_itemselect

2 通用顯示欄目定制窗口的實(shí)現(xiàn)[2]

2.1 數(shù)據(jù)窗口對象的設(shè)計

設(shè)計基于外部數(shù)據(jù)源的Grid風(fēng)格的數(shù)據(jù)窗口d_ itemselect,如圖1所示。其中check列用于讓用戶選擇要顯示的字段,設(shè)置其顯示風(fēng)格為checkbox,屬性為3D look;c_name列是字段名,設(shè)置其visible屬性為false。

2.2 顯示欄目定制窗口界面設(shè)計

設(shè)計Response類型的窗口w_itemset,在窗口上放置一個數(shù)據(jù)窗口控件(dw_1)和兩個命令按鈕(cb_ok和cb_cancel),然后設(shè)置dw_1的dataobject屬性為d_ itemselect。如圖2所示。

圖2 顯示欄目設(shè)置窗口w_itemset

2.3 窗口編碼實(shí)現(xiàn)

(1)w_itemset的open事件的主要功能是接收從父窗口傳來的待排序的數(shù)據(jù)窗口對象,并取出該數(shù)據(jù)窗口對象的所有列的列名、列標(biāo)題及其寬度,把它們插入到dw_1中,以供用戶選擇要顯示的欄目,代碼如下:datawindow dw//定義數(shù)據(jù)窗口對象

dw=message.powerobjectpar m//取得從父窗口傳來的數(shù)據(jù)窗口對象

int i,row

string c_name,c_head,wid,sel

dw_1.settransobject(sqlca)

for i=1 to integer(dw.object.datawindow.column. count)

c_name=dw.describe(’#’+string(i)+’.name’)//取列名

c_head=dw.describe(c_name+’_t.text’)//取列標(biāo)題

wid=dw.describe(c_name+’.width’)//取列寬

ifwid=’0’then sel=’0’else sel=’1’//寬度為0不選擇,否則選中

row=dw_1.insertrow(0)//插入新行

dw_1.setitem(row,’c_name’,c_name)

dw_1.setitem(row,’c_head’,c_head)

dw_1.setitem(row,’check’,sel)

next

(2)cb_ok的clicked事件的主要功能是根據(jù)用戶設(shè)置生成不顯示欄目對應(yīng)的字符串,然后返回給父窗口,以便在父窗口中實(shí)現(xiàn)顯示欄目的動態(tài)控制,代碼如下:

string ret,c_name,sel

int i

for i=1 to dw_1.rowcount()

c_name=dw_1.getitemstring(i,’c_name’)

sel=dw_1.getitemstring(i,’check’)

if sel=’0’then ret+=c_name+’.width=0’+’~t’

next

closewithreturn(parent,ret)

(3)cb_cancel的clicked事件是關(guān)閉窗口并返回-1,代碼如下:

closewithreturn(parent,’-1’)

至此,一個界面友好、通用的數(shù)據(jù)窗口顯示欄目定制窗口設(shè)計完畢。

3 在實(shí)際系統(tǒng)中的應(yīng)用

這里以一個進(jìn)銷存系統(tǒng)為例,介紹上面設(shè)計的數(shù)據(jù)窗口顯示欄目定制窗口在產(chǎn)品信息查詢中的應(yīng)用。第一步,設(shè)計基于產(chǎn)品信息表(products)的grid風(fēng)格的數(shù)據(jù)窗口對象d_products,如圖3所示。

第二步,設(shè)計popup風(fēng)格的窗口w_query,在窗口上放置一個數(shù)據(jù)窗口控件(dw_1),設(shè)置其dataobject屬性為d_products;一個命令按鈕(cb_setitem),設(shè)置其text屬性為"欄目設(shè)置"。該窗口運(yùn)行時效果如圖4中箭頭1所指窗口所示。

第三步:分別為窗口w_query的open、close事件及按鈕cb_setitem的clicked事件編寫如下代碼。

(1)w_query的open事件的功能是檢索數(shù)據(jù),并把數(shù)據(jù)窗口對象的列名和列寬存入數(shù)據(jù)存儲對象,以便改變顯示欄目時使用。其中ds是一個實(shí)例變量,定義為:datastore ds。代碼如下:

dw_1.settransobject(sqlca)dw_1.retrieve()

圖3 數(shù)據(jù)窗口對象d_products

ds=create datastore

ds.dataobject=’d_cnamewidth’//設(shè)計數(shù)據(jù)存儲的數(shù)據(jù)對象

ds.settransobject(sqlca)

string c_name

int i,row

dec wid

for i=1 to integer(dw_1.object.datawindow.column.count)

c_name=dw_1.describe(’#’+string(i)+’.name’)//取列名

wid=dec(dw_1.describe(c_name+’.width’))//取列寬

row=ds.insertrow(0)

ds.setitem(row,’c_name’,c_name)

ds.setitem(row,’width’,wid)

next

(2)w_query的close事件的功能是釋放數(shù)據(jù)存儲ds,代碼如下:

destroy ds

圖4 產(chǎn)品信息查詢窗口w_query

(3)cb_setitem的clicked事件的主要功能是打開顯示欄目設(shè)置窗口,并把要設(shè)置顯示欄目的數(shù)據(jù)窗口傳給w_itemset。用戶設(shè)置完顯示欄目后,接收傳回的顯示欄目定制信息,并根據(jù)該信息修改相應(yīng)欄目的列寬,然后重畫數(shù)據(jù)窗口對象,實(shí)現(xiàn)顯示欄目的動態(tài)控制。代碼如下:

openwithpar m(w_itemset,dw_1)//打開欄目設(shè)置窗口,進(jìn)行設(shè)置

string ret,c_name

dec wid

int i

ret=message.stringpar m//返回顯示欄目定制信息

if ret<>’-1’then

dw_1.setredraw(false)//關(guān)閉數(shù)據(jù)窗口對象的重畫功能

for i=1 to ds.rowcount()

c_name=ds.getitemstring(i,’c_name’)

wid=ds.getitemdecimal(i,’width’)

dw_1.modify(c_name+’.width=’+string(wid))//修改相應(yīng)欄目的寬度

next

dw_1.modify(ret)

dw_1.setredraw(true)//打開數(shù)據(jù)窗口對象的重畫功能,重畫數(shù)據(jù)窗口

end if

openwithparm(w_itemset,dw_1)//打開欄目設(shè)置窗口,進(jìn)行設(shè)置

string ret,c_name

dec wid

int i

ret=message.stringparm//返回顯示欄目定制信息

if ret<>’-1’then

dw_1.setredraw(false)//關(guān)閉數(shù)據(jù)窗口對象的重畫功能

for i=1 to ds.rowcount()

c_name=ds.getitemstring(i,’c_name’)

wid=ds.getitemdecimal(i,’width’)

dw_1.modify(c_name+’.width=’+string(wid))//修改相應(yīng)欄目的寬度

next

dw_1.modify(ret)

dw_1.setredraw(true)//打開數(shù)據(jù)窗口對象的重畫功能,重畫數(shù)據(jù)窗口

end if

至此,代碼設(shè)計完畢。運(yùn)行時單擊"欄目設(shè)置"按鈕,彈出顯示欄目設(shè)置窗口,效果如圖4中箭頭2指示所示。若按圖4進(jìn)行設(shè)置,不顯示品種、型號、產(chǎn)地,則單擊"確定"按鈕后,運(yùn)行結(jié)果如圖5所示。

圖5 運(yùn)行結(jié)果

4 結(jié)語

該工作完成后,可以將d_itemwidth、d_itemselect、w_itemset、w_query放入一個PBL庫中。使用PB開發(fā)應(yīng)用程序時,只需要包含該P(yáng)BL庫,然后創(chuàng)建繼承于w _query的窗口,修改數(shù)據(jù)窗口控件dw_1的dataobject屬性,不需要額外編寫代碼,就可以實(shí)現(xiàn)相關(guān)數(shù)據(jù)窗口對象顯示欄目的定制,實(shí)現(xiàn)了代碼的重用,提高了應(yīng)用程序的開發(fā)效率。

[1]李群先.一種在Power Builder數(shù)據(jù)窗口中實(shí)現(xiàn)字段名稱動態(tài)顯示的方法[J]現(xiàn)代計算機(jī),2005(04):98-100.

[2]楊昭.PowerBuilder9.0數(shù)據(jù)窗口技術(shù)[M]北京:中國水利水電出版社,2004.

[3]柯建勛,張濤,邵亮.PowerBuilder9.0進(jìn)階開發(fā)篇[M]北京:清華大學(xué)出版社,2003.

[責(zé)任編輯 張燦邦]

Design and Application of a GeneralD isplayColumn Custom ization W indow for DataW indow

LOU Q i-m ing,YANG Bo,LI Ying-fang
(Department of Engineering,Honghe University,Mengzi 661100,China)

First discussed the methods of control display columns ofDataW indow dynamically in PowerBuilder to user requirements,then designed a generalwindow to customize display columns of DataW indow with user-friendly interface.

Power Builder;DataW indow;DataStore;Infor mation System

book=8,ebook=190

TP31

A

1008-9128(2010)04-0063-04

2010-06-17

婁七明(1976-),男,云南石林人,講師,主要從事M IS系統(tǒng)應(yīng)用研究.

猜你喜歡
設(shè)置方法設(shè)計
中隊(duì)崗位該如何設(shè)置
瞞天過海——仿生設(shè)計萌到家
設(shè)計秀
海峽姐妹(2017年7期)2017-07-31 19:08:17
有種設(shè)計叫而專
Coco薇(2017年5期)2017-06-05 08:53:16
用對方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
本刊欄目設(shè)置說明
中俄臨床醫(yī)學(xué)專業(yè)課程設(shè)置的比較與思考
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
捕魚
地鐵出入段線轉(zhuǎn)換軌設(shè)置
主站蜘蛛池模板: 亚洲一区无码在线| 国产精品伦视频观看免费| 色婷婷成人| 九九热精品视频在线| 999国产精品永久免费视频精品久久| 亚洲不卡网| 无码精品国产VA在线观看DVD| 国产精品网曝门免费视频| 亚洲精品成人福利在线电影| 国产精品片在线观看手机版| 日本手机在线视频| 久青草网站| 国内精品久久久久鸭| 全部免费毛片免费播放| 久久久久青草大香线综合精品| 国产偷国产偷在线高清| 欧洲极品无码一区二区三区| 色综合热无码热国产| 国产在线观看99| 男人天堂伊人网| 全部免费特黄特色大片视频| 久久伊人久久亚洲综合| 国产人成在线视频| 欧美精品亚洲精品日韩专区| 亚洲视频黄| 欧美在线中文字幕| 国产好痛疼轻点好爽的视频| 97精品伊人久久大香线蕉| 波多野结衣爽到高潮漏水大喷| 一级毛片免费观看久| 国产成人三级| 小说区 亚洲 自拍 另类| 日韩高清一区 | 精品亚洲国产成人AV| 午夜无码一区二区三区| 国产视频 第一页| 99久久99这里只有免费的精品| 人妻丰满熟妇av五码区| 被公侵犯人妻少妇一区二区三区| 精品国产成人av免费| 国产福利一区视频| 国产高清毛片| 久久这里只有精品免费| 国产色婷婷| 欧美h在线观看| 国内精品视频在线| 找国产毛片看| 高清色本在线www| 亚洲乱码精品久久久久..| 国产一区成人| 国产精品9| 亚洲日韩AV无码精品| 五月婷婷综合网| 经典三级久久| 国产九九精品视频| 亚洲日韩AV无码一区二区三区人 | a级毛片免费在线观看| 成年女人a毛片免费视频| 国产成人高精品免费视频| 国产后式a一视频| 国产精品无码AV中文| 久久香蕉国产线看观看式| 欧美a在线| 欧美在线国产| 亚洲第一区精品日韩在线播放| 91蝌蚪视频在线观看| 中文字幕第4页| 婷婷亚洲天堂| 青青热久麻豆精品视频在线观看| …亚洲 欧洲 另类 春色| 亚洲综合二区| 亚洲欧美一级一级a| 无码精品福利一区二区三区| 亚洲日本在线免费观看| 色AV色 综合网站| 亚洲永久免费网站| 欧美一级高清片久久99| 香蕉视频在线观看www| 毛片卡一卡二| 日韩性网站| 久久久波多野结衣av一区二区| 亚洲欧洲日韩国产综合在线二区|