PB中實現資料視窗動態排序的三種方法

2021-08-21 22:55:25 字數 2505 閱讀 6363

在powerbuilder中使用資料視窗檢索到的資料往往是無序的,雖然可以通過設定select語句實現排序的功能,但是資料視窗一旦生成都無法進行動態調整。筆者總結了在已經生成的資料視窗中實現動態排序的三種方法,現介紹給大家。

一、 準備工作

設計如圖1所示的示例視窗。為了更好地比較三種不同的方法,dw—1中的資料來自兩個表student和class。student表中包含四個欄位sid(學號)、sname(姓名)、saddr(住址)和cid(班號),class表中包含兩個欄位cid(班號)和cname(班級名稱)。

二、三種方法的源程式

三種方法中的「執行」按鈕的**分別為:

方法1:用setsqlselect()

string ls—oldsql,ls—newsql,ls—order ls—column

ls—oldsql=dw—1.getsqlselect()

choose case ddlb—1.text

case ″學號″ls—column=″sid″

case ″姓名″ls—column=″sname″

case ″住址″ls—column=″saddr″

case ″班號″ls—column=″class.cid″

case ″班級名稱″ ls—column=″cname″

end choose

if rb—1.checked then ls—order=″asc″

else ls—order=″desc″

end if

ls—newsql=ls—oldsql+″ order by ″+ &

ls—column+″ ″+ls—order

if dw—1.setsqlselect(ls—newsql)=-1 then

messagebox(″警告″,″資料設定失敗″,stopsign!)

else dw—1.settransobject(sqlca)

dw—1.reset()

dw—1.retrieve()

dw—1.setsqlselect(ls—oldsql)

end if

方法2:用describe()和modify()

string ls—mod, ls—order,ls—old,ls—column

ls—old=dw—1.describe(′datawindow.table.select′)

dw—1.settransobject(sqlca)

choose case ddlb—1.text

case ″學號″ls—column=″sid″

case ″姓名″ls—column=″sname″

case ″住址″ls—column=″saddr″

case ″班號″ls—column=″class.cid″

case ″班級名稱″ ls—column=″cname″

end choose

if rb—1.checked then ls—order=″asc″

else ls—order=″desc″

end if

ls—mod=″datawindow.table.select=′ ″+ls—old+&

′order by ″ ′+ls—column+′ ″ ′+ls—order+″ ′ ″

dw—1.modify(ls—mod)

dw—1.retrieve()

dw—1.modify(″datawindow.table.select= &

′ ″+ls—old+″ ′ ″)

方法3:用setsort()和sort()

string ls—sort,ls—order,ls—column

choose case ddlb—1.text

case ″學號″ ls—column=″#1″

case ″姓名″ ls—column=″#2″

case ″住址″ ls—column=″#3″

case ″班號″ ls—column=″#4″

case ″班級名稱″ ls—column=″#5″

end choose

if rb—1.checked then ls—order=″a″

else ls—order=″d″

end if

ls—sort=ls—column+′′+ls—order

dw—1.setsort(ls—sort)

dw—1.sort()

三、三種方法的比較

1.第一種和第二種方法要求資料視窗在生成時是無序的,第三種方法無此要求。

2.對於來自不同表單的相同的列名(如student.cid、class.cid)用第二種方法排序實現起來較麻煩,因為在用modify()函式時要特別注意引號的使用。但是第二種方法比第一種方法的執行速度要快。

3.第三種方法使用起來最方便,既可以引用列名也可引用列號(如#4表示第四列)來指定序列。

PB 實現子資料視窗相互關聯

使用子資料視窗前需要主視窗是乙個下拉資料窗。子資料視窗也就是下拉資料視窗。子資料視窗也是普通的資料視窗物件,沒有什麼特殊的地方,它的建立方法 可以使用的控制項 程式設計時可以使用的函式等,都和普通的資料視窗相同。特殊的地方只是因為它放在了父資料視窗中,需要和父視窗進行配合。當為資料視窗中某欄位指定為...

PB視窗居中的實現方法

在pb中,如何使開啟的視窗在螢幕中居中顯示呢?現在用得多的有以下兩種 1 直接使用pb視窗中的center屬性 pb9及以上版本才有該屬性 這種方法最為簡單,但是明眼人都可以看出問題來 視窗上下並沒有真正的居中,視窗被過分的往上抬了。2 為了解決這個問題,大多數程式中都使用自定義的函式來實現視窗居中...

PB中的資料視窗自動重新整理技術

在我們編寫諸如像庫存,銷售等應用系統時,總希望程式能動態的自動重新整理庫存量或銷售量,比如說每隔1秒重新整理一次。要實現這樣的功能只要我們利用資料視窗的時間間隔屬性 timer interval 當該值為0時資料視窗不進行重新整理,如果要使資料視窗以每一秒鐘的頻率重新整理的話,只要將該值設為1000...