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

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

一、 準備工作

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



圖1

二、三種方法的來源程式

三種方法中的“執行”按鈕的代碼分別為:

方法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表示第四列)來指定序列。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.