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è)置
主站蜘蛛池模板: 无码精油按摩潮喷在线播放| 中文一级毛片| 久久久久免费精品国产| 国产sm重味一区二区三区| 欧洲免费精品视频在线| 久久午夜夜伦鲁鲁片无码免费| 色婷婷啪啪| 亚洲视频四区| 毛片大全免费观看| 日韩精品免费一线在线观看| 日韩国产黄色网站| 亚洲an第二区国产精品| 免费视频在线2021入口| 一本一本大道香蕉久在线播放| 色天天综合| 成人午夜久久| 国产高颜值露脸在线观看| 国产一区二区精品福利| 国产原创演绎剧情有字幕的| 国产精品久线在线观看| 亚洲无码高清免费视频亚洲| 九色视频在线免费观看| 久久久久人妻精品一区三寸蜜桃| 毛片久久久| a毛片免费在线观看| 亚洲美女高潮久久久久久久| 婷婷午夜天| 国产鲁鲁视频在线观看| 国产手机在线ΑⅤ片无码观看| 91青青草视频在线观看的| 国产高清又黄又嫩的免费视频网站| 92午夜福利影院一区二区三区| 欧美专区日韩专区| 欧美色99| 亚洲欧美成人在线视频| 国产激情第一页| 亚洲成人免费看| 黄色a一级视频| 热久久综合这里只有精品电影| 亚洲av综合网| 亚洲成人精品久久| 97国产成人无码精品久久久| 久久久精品无码一二三区| 亚洲一欧洲中文字幕在线| 亚洲成年网站在线观看| 欧美日韩导航| 免费三A级毛片视频| 国产成人一二三| 就去色综合| 国产成人亚洲日韩欧美电影| 国产91丝袜在线播放动漫| 亚洲男人在线| 免费观看国产小粉嫩喷水| 国产日韩精品欧美一区灰| 天天综合亚洲| 国产乱子伦视频在线播放| 欧美成人影院亚洲综合图| 精品人妻无码区在线视频| 日本一区中文字幕最新在线| 美女一区二区在线观看| 国产国拍精品视频免费看| 91在线精品免费免费播放| 99无码中文字幕视频| 伊人AV天堂| 亚洲视频二| 成人综合网址| 伊人AV天堂| 久久动漫精品| 曰韩免费无码AV一区二区| 人妻丰满熟妇αv无码| 蜜臀AVWWW国产天堂| 亚洲黄网在线| 成人国内精品久久久久影院| 亚洲 欧美 偷自乱 图片| 欧美国产日本高清不卡| 伊人久久精品无码麻豆精品| 综合社区亚洲熟妇p| 2021国产精品自产拍在线| 激情六月丁香婷婷| 久久综合AV免费观看| 久久国产亚洲偷自| 114级毛片免费观看|