2016-09-22 42 views
0

如果我有一個列表框說lstABC與3列A,B & c。 有3個排序按鈕說btnSortA,btnSortB,btnSortC。 有沒有辦法在按鈕上使用on_click事件,允許用戶在不更改lstABC.rowsource的情況下對lstABC進行排序?排序列表框有條件地不更改行源

我是想實現這一行的東西:

Private sub btnSortA_Click() 
lstABC.Orderby = "ColumnA ASC" 
me.lstABC.OrderByOn = True 
End Sub 

當然,我可以建立SQL字符串,並設置/重新查詢lstABC.rowsource =字符串(每個按鈕),但我尋找的東西簡單而高效,不會過分複雜。謝謝

+0

也許如果有一種方法來改變SQL中的排序順序來排序IIF(某些條件)是真的...並將其構建到原始行源中 – Rhdr

+0

這看起來就像這樣'SELECT A,B,C FROM TableName IIf(chk_A OR chk_B OR chk_C,IIf(chk_A,「ORDER BY A;」,IIf(chk_B,「ORDER BY B;」,「ORDER BY C;」),「;」)'但在這種情況下,將使用複選框,而不是按鈕 – LostReality

+0

這看起來很有希望,更符合我的想法,現在如果我可以讓它工作 – Rhdr

回答

1

在我看來,你不能簡單比改變行來源。你也可以在列表框中讀取所有的行並重新插入所有行與.addItem正確的順序...

Private Sub sortListbox(criteria As String) 
    Dim strSQL As String 

    strSQL = "SELECT A,B,C FROM TableName" _ 
    & " ORDER BY " & criteria 

    Me.yourListboxController.RowSource = strSQL 
    Me.yourListboxController.Requery 
End Sub 

而你只需要添加的單擊事件:

Private Sub btnSortA_Click() 
    Call sortListbox("A") 
End Sub 

Private Sub btnSortB_Click() 
    Call sortListbox("B") 
End Sub 

Private Sub btnSortC_Click() 
    Call sortListbox("C") 
End Sub 

我不認爲你可以比這更簡單。

+0

謝謝,希望有一些隱藏的訪問構建功能,我錯過了...無論如何,現在我只需要將其餘的代碼與此對齊 – Rhdr