国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Powerbuilder的通用排序模塊設(shè)計(jì)與實(shí)現(xiàn)

2013-04-29 07:11蔣玉芳
考試周刊 2013年79期
關(guān)鍵詞:字段控件排序

蔣玉芳

摘 要: 利用PowerBuilder的數(shù)據(jù)窗口,設(shè)計(jì)一個(gè)數(shù)據(jù)管理信息系統(tǒng)通用的排序模塊,發(fā)揮對(duì)數(shù)據(jù)窗口任意字段組合的排序功能。利用此排序模塊,可極大地提高管理信息系統(tǒng)的編程效率,具有很強(qiáng)的實(shí)用性。

關(guān)鍵詞: Powerbuilder 數(shù)據(jù)窗口 字段 排序 通用模塊設(shè)計(jì)

引言

在利用Powerbuilder開(kāi)發(fā)的數(shù)據(jù)庫(kù)信息管理系統(tǒng)中,用戶常常有按某種順序查看數(shù)據(jù)的要求,而這種要求是會(huì)動(dòng)態(tài)改變的,這就要求開(kāi)發(fā)者不能將查詢出來(lái)的數(shù)據(jù)以固定的順序展示給用戶 ,而必須提供按用戶要求對(duì)數(shù)據(jù)進(jìn)行靈活多變的排序功能。因此,為了節(jié)約開(kāi)發(fā)時(shí)間,提高開(kāi)發(fā)效率,設(shè)計(jì)一種通用的排序程序模塊顯得非常有必要。

把要排序的數(shù)據(jù)窗口作為參數(shù)傳遞給此通用排序模塊,然后獲取列名,通過(guò)訪問(wèn)數(shù)據(jù)窗口的屬性,組合成排序字符串,即可實(shí)現(xiàn)排序功能。

一、創(chuàng)建一個(gè)Tabular類型的數(shù)據(jù)窗口對(duì)象,選擇Exteral數(shù)據(jù)源,取名為:d_columns_dddw。

該數(shù)據(jù)窗口作為下拉子數(shù)據(jù)窗口用于存儲(chǔ)要排序的表的列號(hào)和字段名。

表1 d_columns_dddw的各字段

二、創(chuàng)建一個(gè)Tabular類型的數(shù)據(jù)窗口對(duì)象,選擇Exteral數(shù)據(jù)源,取名為d_sort。

該數(shù)據(jù)窗口對(duì)象的外觀如圖1所示。該數(shù)據(jù)窗口對(duì)象用于輸入要排序的表的字段名、優(yōu)先級(jí)和升降序,各字段如表2所示。

表2 d_sort的各字段

圖1 d_sort的設(shè)計(jì)效果

(一)grade字段屬性。Style Type:Edit。

(二)column_number字段屬性。Style Type:DropDownDW;DataWindow:d_columnsdddw;Display Column:column_name;Data Column:column_number。

(三)sort_order字段屬性。Style Type:CheckBox;Text:升序;Data Value for on:A;Data Value for off:D。

三、創(chuàng)建一個(gè)UserObject用戶對(duì)象數(shù)據(jù)窗口uo_dw_sort。

Standard Visual;Types:datawindow;DataObject:d_sort,如圖2所示:

圖2 用戶對(duì)象數(shù)據(jù)窗口uo_dw_sort

四、創(chuàng)建一個(gè)response類型的窗口w_sort),添加相關(guān)控件。

具體如表3和圖3所示,功能是設(shè)置組合排序的條件,得出排序結(jié)果。數(shù)據(jù)窗口控件dw_sort的創(chuàng)建方法是:?jiǎn)螕艄ぞ邫谏系腢serObject圖標(biāo),在彈出式窗口中選擇已經(jīng)創(chuàng)建好的uo_dw_sort對(duì)象。

表3 窗口w_sort上的控件

圖3 排序條件設(shè)置窗口w_sort

(一)聲明窗口w_sort的實(shí)例變量

Private:DataWindow idw_ToSortOn //用來(lái)接收傳遞過(guò)來(lái)的要排序的數(shù)據(jù)窗口對(duì)象

(二)數(shù)據(jù)窗口dw_sort中的事件函數(shù)

通過(guò)數(shù)據(jù)窗口dw_sort的用戶自定義事件來(lái)實(shí)現(xiàn)對(duì)排序條件的組合設(shè)置,主要有增加、插入、刪除記錄和高亮顯示記錄行等功能。

1.constructor事件。

This.SetRowFocusIndicator(Hand!) //記錄行前面設(shè)置為手形

2.用戶自定義事件。

(1)ue_addrow()。功能:在記錄末增加一行過(guò)濾條件記錄,并調(diào)用wf_setgrade()設(shè)置優(yōu)先級(jí)。腳本略。

(2)ue_insertrow()。功能:在當(dāng)前行之后插入一行記錄,并調(diào)用wf_setgrade()設(shè)置優(yōu)先級(jí)。腳本略。

(3)ue_deleterow()。功能:刪除一行過(guò)濾條件,并調(diào)用wf_setgrade()設(shè)置優(yōu)先級(jí)。腳本略。

(4)ue_dddw_mousemove()。功能:捕捉下拉數(shù)據(jù)窗口事件,高亮顯示鼠標(biāo)經(jīng)過(guò)的記錄行。腳本略。

(三)窗口w_ sort中的事件函數(shù)

1.wf_strip()。功能:用空格替換特殊字符,去掉非法字符。

//Function Name:wf_strip;Access:private;Return Type:None

//Argument Name:as_arg;Argument Type:string; Pass By:reference

Integer li_length,li_pos

li_length=Len(as_arg)

Forli_pos=1 To li_length

Choose Case Mid(as_arg,li_pos,1)

Case ?謖~t?謖,?謖~r?謖,?謖~n?謖,?謖"?謖

as_arg=Trim(Replace(as_arg,li_pos,1,?謖))

End Choose

Next

2.wf_buildsortstring()。功能:構(gòu)造排序表達(dá)式字符串。

//Function Name:wf_buildsortstring;Access:private;Return Type:string

String ls_colname,ls_order,ls_expression

Integer li_i,li_rowcount

Long ll_columnno

dw_sort.AcceptText() //接收數(shù)據(jù)窗口改變

li_rowcount=dw_sort.RowCount() //獲取記錄行的總數(shù)

For li_i=1 To li_rowcount

ll_columnno=dw_sort.GetItemNumber(li_i,?謖column_number?謖) //獲取列號(hào)

If IsNull(ll_columnno) Then

Continue;

Else

ls_colname=?謖#?謖+String(ll_columnno) //獲取列名

ls_order=dw_sort.GetItemString(li_i,?謖sort_order?謖) //獲取排序類型(升序A,降序D)

End If

//組合排序表達(dá)式字符串

If Trim(ls_colname)<>?謖?謖 Then ls_expression=ls_expression + ls_colname + ?謖 ?謖 +ls_order+ ?謖 ?謖

Next

Return ls_expression

3.wf_setgrade()。功能:設(shè)置字段排序的優(yōu)先級(jí)別。

//Function Name:wf_setgrade;Access:private;Return Type:None

Long ll_row,ll_i

ll_row=dw_sort.RowCount() //總行數(shù),即排序的條件個(gè)數(shù)

If ll_row>0 Then

dw_sort.SetRedraw(False)

For ll_i=1 To ll_row

dw_sort.SetItem(ll_i,1,ll_i) //按順序設(shè)置優(yōu)先級(jí)

Next

dw_sort.SetRedraw(True)

End If

4.窗口open事件。功能:初始化數(shù)據(jù)窗口dw_sort。

Integer li_columncount,li_columnindex //數(shù)據(jù)窗口的總列數(shù)和列的序號(hào)

String ls_column,ls_display //下拉子數(shù)據(jù)窗口的列名和顯示名

Long ll_row

Pointer lp_oldpointer

DataWindowChild ldwc_columns

idw_ToSortOn=Message.PowerObjectParm //獲取要排序的數(shù)據(jù)窗口對(duì)象

lp_oldpointer=SetPointer(HourGlass?。?/p>

dw_sort.SetRedraw(False)

li_columncount=Integer(idw_ToSortOn.Describe(?謖DataWindow.Column.Count?謖)) //數(shù)據(jù)窗口列數(shù)

dw_sort.GetChild(?謖column_number?謖,ldwc_columns) //獲取下拉子數(shù)據(jù)窗口

//把要排序的數(shù)據(jù)窗口的列號(hào)和列名填充到下拉子數(shù)據(jù)窗口

For li_columnindex=1 To li_columncount

ls_column=idw_ToSortOn.Describe(?謖#?謖+String(li_columnin-

dex)+?謖.Name?謖) //字段名

ls_display=idw_ToSortOn.Describe(ls_column+?謖_t.Text?謖) //顯示名

If ls_display<>?謖!?謖 Then

wf_strip(ls_display) //去掉非法字符

ll_row=ldwc_columns.InsertRow(0) //在下拉子數(shù)據(jù)窗口中增加一條記錄

ldwc_columns.SetItem(ll_row,?謖column_number?謖,li_columnindex) //填充列號(hào)

ldwc_columns.SetItem(ll_row,?謖column_name?謖,ls_display) //填充列名

End If

Next

dw_sort.Event ue_addrow()

dw_sort.SetRedraw(True)

SetPointer(lp_oldpointer)

(四)窗口w_ sort中的按鈕控件

1.cb_add(增加):dw_sort.Event ue_addrow()

2.cb_insert(插入):dw_sort.Event ue_insertrow()

3.cb_delete(刪除):dw_sort.Event ue_deleterow()

4.cb_ok(確定):

String ls_sortstring

Pointer lp_oldpointer

ls_sortstring=wf_buildsortstring() //獲取排序字符串

lp_oldpointer=SetPointer(HourGlass?。?/p>

If ls_sortstring=?謖???謖 Then ls_sortstring=?謖?謖

//對(duì)數(shù)據(jù)窗口進(jìn)行排序

idw_ToSortOn.SetSort(ls_sortstring)

idw_ToSortOn.SetRedraw(False)

idw_ToSortOn.Sort()

idw_ToSortOn.SetRedraw(True)

SetPointer(lp_oldpointer)

Close(Parent)

5.cb_cancel(取消):Close(Parent)。關(guān)閉排序窗口。

(五)排序模塊的調(diào)用方法

如果要排序的數(shù)據(jù)窗口為dw_1,只要在排序按鈕的clicked事件中添加代碼“OpenWithParm(w_ sort,dw_1)”就可以實(shí)現(xiàn)排序,運(yùn)行效果如圖4所示。

圖4 調(diào)用排序模塊

結(jié)語(yǔ)

通用排序模塊的設(shè)計(jì)可以節(jié)約系統(tǒng)開(kāi)發(fā)的時(shí)間,提高開(kāi)發(fā)效率,更好地滿足用戶要求對(duì)數(shù)據(jù)進(jìn)行靈活多變的排序的要求。模塊可以單獨(dú)存儲(chǔ)到一個(gè)PBL文件當(dāng)中,如果在應(yīng)用程序的開(kāi)發(fā)過(guò)程中需用到某些功能,只要把PBL文件加到庫(kù)的搜索路徑當(dāng)中即可。

參考文獻(xiàn):

[1]陳永強(qiáng),李茜.SQL Server 2005+PowerBuilder 11高級(jí)開(kāi)發(fā)指南.清華大學(xué)出版社,2008,第一版.

[2]樊金生,張翠肖. PowerBuilder 10.5實(shí)用教程.科學(xué)出版社,2009,第一版.

[3]向隅.新編PowerBuilder程序設(shè)計(jì)實(shí)例教程.清華大學(xué)出版,2009,第一版.

猜你喜歡
字段控件排序
圖書(shū)館中文圖書(shū)編目外包數(shù)據(jù)質(zhì)量控制分析
排序不等式
恐怖排序
節(jié)日排序
關(guān)于.net控件數(shù)組的探討
CNMARC304字段和314字段責(zé)任附注方式解析
無(wú)正題名文獻(xiàn)著錄方法評(píng)述
關(guān)于CNMARC的3--字段改革的必要性與可行性研究
就這樣玩會(huì)VBA中常見(jiàn)的自定義控件
在PowerBuUder中利用WinSock控件制作簡(jiǎn)單的Web服務(wù)器