2016-09-22 23 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