• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

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

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

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

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

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

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

      strsql=dwcontrol.GetSQLSelect()

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

      dwcontrol.SetSQLSelect(strsql)

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

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

      方法二:通過(guò)設(shè)置數(shù)據(jù)窗口對(duì)象的列及其標(biāo)題的visible屬性來(lái)實(shí)現(xiàn)[3]。需顯示的列及其標(biāo)題的visible屬性設(shè)置為true,不需顯示的列及其標(biāo)題的visible屬性設(shè)置為false??梢允褂胢odify方法實(shí)現(xiàn),語(yǔ)法格式如下:

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

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

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

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

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

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

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

      使用這種方法不需要從數(shù)據(jù)庫(kù)重新檢索數(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事件的主要功能是接收從父窗口傳來(lái)的待排序的數(shù)據(jù)窗口對(duì)象,并取出該數(shù)據(jù)窗口對(duì)象的所有列的列名、列標(biāo)題及其寬度,把它們插入到dw_1中,以供用戶選擇要顯示的欄目,代碼如下:datawindow dw//定義數(shù)據(jù)窗口對(duì)象

      dw=message.powerobjectpar m//取得從父窗口傳來(lái)的數(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事件的主要功能是打開(kāi)顯示欄目設(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)//打開(kāi)欄目設(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)//打開(kāi)數(shù)據(jù)窗口對(duì)象的重畫功能,重畫數(shù)據(jù)窗口

      end if

      openwithparm(w_itemset,dw_1)//打開(kāi)欄目設(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)//打開(kāi)數(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é)語(yǔ)

      該工作完成后,可以將d_itemwidth、d_itemselect、w_itemset、w_query放入一個(gè)PBL庫(kù)中。使用PB開(kāi)發(fā)應(yīng)用程序時(shí),只需要包含該P(yáng)BL庫(kù),然后創(chuàng)建繼承于w _query的窗口,修改數(shù)據(jù)窗口控件dw_1的dataobject屬性,不需要額外編寫代碼,就可以實(shí)現(xiàn)相關(guān)數(shù)據(jù)窗口對(duì)象顯示欄目的定制,實(shí)現(xiàn)了代碼的重用,提高了應(yīng)用程序的開(kāi)發(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)階開(kāi)發(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)的《傷痕》
      好巧等
      專利檢索中“語(yǔ)義”的表現(xiàn)
      專利代理(2016年1期)2016-05-17 06:14:36
      我重畫《楓》的緣由
      國(guó)際標(biāo)準(zhǔn)檢索
      湟源县| 黎川县| 上杭县| 德化县| 锦屏县| 重庆市| 玉树县| 赞皇县| 和硕县| 阳高县| 荃湾区| 平安县| 闽侯县| 土默特左旗| 阿勒泰市| 阿图什市| 南华县| 宁安市| 怀仁县| 万全县| 乡城县| 南通市| 延川县| 固始县| 昌黎县| 绥德县| 天台县| 长沙市| 正安县| 塘沽区| 揭东县| 固阳县| 绥宁县| 年辖:市辖区| 电白县| 永济市| 东台市| 奉新县| 乳山市| 连平县| 济南市|