pb數據窗口如何按當前列的值過濾下拉數據窗口(翻譯)


   假設我們的訂單系統,有"新增"、"待定"、"提交"、"取消"四種狀態,新增的定單只能修改為“取消”和“待定”狀態,“待定”的訂單只能改變為"取消"和"提交"的狀態。“取消”和“提交”狀態的訂單得訂單狀態不能被改變。

   現在我們假設數據窗口把所有的訂單都顯示了出來,顯示的列有“訂單號”“訂單狀態”,訂單狀態列是可以被更新的,而且訂單狀態被實現為一下拉數據窗口,下拉數據窗口的顯示列為(取消,提交,新增,待定)對應的數據列的(1,2,3,4).

   如何在顯示正確的訂單狀態的同時又過濾出下來數據窗口呢?

   一開始的解決方法是,通過捕捉pbm_dropdown事件,使用GetChild的SetFilter和Filter methods,但是會導致其它列的狀態顯示不正確。假設有兩個訂單,一個是“新增”狀態,一個是“提交”狀態,我們通過Filter子數據窗口的方法把子數據窗口過濾的方法把”新增"狀態的那個訂單的下來數據窗口中的只顯示“取消”,“新增”和“待定”狀態,這樣對於新增狀態的訂單顯示是正確的,但是在同時因為將下拉數據窗口中的“提交”這一行給過濾掉了會導致“提交”狀態的那個訂單只會顯示不正確,顯示2。

   我們需要尋找到一種方法,在下拉數據窗口下拉以后重繪。

   下邊是一種改動最小的實現方法。我們建議把這個方法封裝成數據窗口的服務,有關細節放面的東西可以聯系作者。實際上,就是建議其中的 of_Filter 方法能夠結合使用of_Register方法將datawindows,column以及過filter strings都結合起來使of_Filter 不用再每個數據窗口里邊都寫一次。

Step 1 - declare instance variables

boolean ib_dropdowndropped = False
boolean ib_dropdownredrawn = True

Step 2 - extend the pbm_dropdown event

ib_dropdowndropped = True
ib_dropdownredrawn = False
of_Filter(True)
ib_dropdownredrawn = True

Step 3 - extend the pbm_ncpaint event

If (ib_dropdowndropped And ib_dropdownredrawn) Then
 ib_dropdowndropped = False
 ib_dropdownredrawn = False
 of_Filter(False)
 ib_dropdownredrawn = True
End If

Step 4 - write the of_Filter (boolean ab_switch) subroutine

datawindowchild ldwc
long ll_getitemnumber
string ls_setfilter = ""

If (ab_switch) Then
 ll_getitemnumber = GetItemNumber(GetRow(), "order_status_id")
 If (ll_getitemnumber = 1) Then // cancelled -> cancelled
  ls_setfilter = "(order_status_id = 1)"
 ElseIf (ll_getitemnumber = 2) Then // confirmed -> confirmed
  ls_setfilter = "(order_status_id = 2)"
 ElseIf (ll_getitemnumber = 3) Then // new -> cancelled, new, pending
  ls_setfilter = "(order_status_id = 1) or (order_status_id = 3) or
(order_status_id = 4)"
 ElseIf (ll_getitemnumber = 4) Then // pending -> cancelled, confirmed,
pending
  ls_setfilter = "(order_status_id = 1) or (order_status_id = 2) or
(order_status_id = 4)"
 End If
End If

GetChild("order_status_id", ldwc)
ldwc.SetFilter(ls_setfilter)
ldwc.Filter()

原文地址:http://www.pbdr.com/pbtips/dw/fltrdddw.htm


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM