亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

        2010-09-11 09:54:30婁七明楊波李穎芳
        紅河學(xué)院學(xué)報(bào) 2010年4期
        關(guān)鍵詞:重畫代碼檢索

        婁七明,楊波,李穎芳

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

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

        婁七明,楊波,李穎芳

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

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

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

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

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

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

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

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

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

        strsql=dwcontrol.GetSQLSelect()

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

        dwcontrol.SetSQLSelect(strsql)

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

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

        方法二:通過設(shè)置數(shù)據(jù)窗口對(duì)象的列及其標(biāo)題的visible屬性來實(shí)現(xiàn)[3]。需顯示的列及其標(biāo)題的visible屬性設(shè)置為true,不需顯示的列及其標(biāo)題的visible屬性設(shè)置為false??梢允褂胢odify方法實(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ù),效率較高,但是會(huì)打亂數(shù)據(jù)窗口對(duì)象中列的顯示順序,尤其是當(dāng)設(shè)置數(shù)據(jù)窗口對(duì)象中包含第一列在內(nèi)的數(shù)列不可見時(shí),將會(huì)出現(xiàn)一些空位,很難控制。

        方法三:通過設(shè)置數(shù)據(jù)窗口對(duì)象列的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è)計(jì)一個(gè)通用的數(shù)據(jù)窗口顯示欄目定制窗口。

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

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

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

        設(shè)計(jì)基于外部數(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è)計(jì)

        設(shè)計(jì)Response類型的窗口w_itemset,在窗口上放置一個(gè)數(shù)據(jù)窗口控件(dw_1)和兩個(gè)命令按鈕(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ù)窗口對(duì)象,并取出該數(shù)據(jù)窗口對(duì)象的所有列的列名、列標(biāo)題及其寬度,把它們插入到dw_1中,以供用戶選擇要顯示的欄目,代碼如下:datawindow dw//定義數(shù)據(jù)窗口對(duì)象

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

        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è)置生成不顯示欄目對(duì)應(yīng)的字符串,然后返回給父窗口,以便在父窗口中實(shí)現(xiàn)顯示欄目的動(dòng)態(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’)

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

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

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

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

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

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

        dw_1.settransobject(sqlca)dw_1.retrieve()

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

        ds=create datastore

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

        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ù)存儲(chǔ)ds,代碼如下:

        destroy ds

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

        (3)cb_setitem的clicked事件的主要功能是打開顯示欄目設(shè)置窗口,并把要設(shè)置顯示欄目的數(shù)據(jù)窗口傳給w_itemset。用戶設(shè)置完顯示欄目后,接收傳回的顯示欄目定制信息,并根據(jù)該信息修改相應(yīng)欄目的列寬,然后重畫數(shù)據(jù)窗口對(duì)象,實(shí)現(xiàn)顯示欄目的動(dòng)態(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ù)窗口對(duì)象的重畫功能

        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ù)窗口對(duì)象的重畫功能,重畫數(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ù)窗口對(duì)象的重畫功能

        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ù)窗口對(duì)象的重畫功能,重畫數(shù)據(jù)窗口

        end if

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

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

        4 結(jié)語

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

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

        [2]楊昭.PowerBuilder9.0數(shù)據(jù)窗口技術(shù)[M]北京:中國(guó)水利水電出版社,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)用研究.

        猜你喜歡
        重畫代碼檢索
        2019年第4-6期便捷檢索目錄
        創(chuàng)世代碼
        創(chuàng)世代碼
        創(chuàng)世代碼
        創(chuàng)世代碼
        永遠(yuǎn)的《傷痕》
        好巧等
        專利檢索中“語義”的表現(xiàn)
        專利代理(2016年1期)2016-05-17 06:14:36
        我重畫《楓》的緣由
        國(guó)際標(biāo)準(zhǔn)檢索
        亚洲福利二区三区四区| 91久久久久无码精品露脸| 人妻少妇中文字幕久久69堂| 色视频不卡一区二区三区| 国产av自拍在线观看| 淫片一区二区三区av| 中文字幕丰满伦子无码| 国产成人精品电影在线观看18 | 蜜臀性色av免费| 成人无码视频| 亚洲色图在线视频免费观看| 国产av丝袜熟女丰满一区二区| 国产精品 亚洲 无码 在线| 永久免费不卡在线观看黄网站| 久久精品中文字幕第一页| 国产麻豆放荡av激情演绎| 久久99天堂av亚洲av| 国产精品欧美一区二区三区不卡| 四虎精品成人免费观看| 国产人妖一区二区av| 你懂的视频网站亚洲视频| 久久精品国产av一级二级三级| 被黑人猛躁10次高潮视频| 伊人精品无码AV一区二区三区| 蜜臀一区二区av天堂| 日韩精品一二三区乱码| 日本少妇高潮喷水视频| 国产精品白浆在线观看免费| 69久久夜色精品国产69| 亚洲AV无码成人精品区日韩密殿 | 久久久精品视频网站在线观看| 三年在线观看免费大全下载| 无码之国产精品网址蜜芽| 国产精品亚洲美女av网站| 邻居人妻的肉欲满足中文字幕| 日本怡春院一区二区三区| 8888四色奇米在线观看| 2021年国产精品每日更新| 久久久精品久久久国产| 在线观看特色大片免费视频| 人妻aⅴ无码一区二区三区 |