在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...