【问题标题】:Sort List-box Conditionally without changing the Row-source有条件地对列表框进行排序而不更改行源
【发布时间】:2017-01-30 16:43:30
【问题描述】:

如果我有一个包含 3 列 A、b 和 c 的列表框,请说 lstABC。 并且有 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 = string(对于每个按钮),但我正在寻找一些简单而高效的东西,不会使事情变得过于复杂。谢谢

【问题讨论】:

  • 也许如果有办法改变 SQL 中的排序顺序以在 IIF(某些条件)上排序是真的......并将其构建到原始行源中
  • 这看起来像 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;"), ";") 但在这种情况下它会使用复选框而不是按钮
  • 这看起来很有希望,并且更符合我的想法,现在如果我可以让它工作
  • 不要忘记在您的复选框的onClick 事件中调用列表框上的.Requery

标签: sql sorting ms-access listbox vba


【解决方案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

我认为你没有比这更简单的了。

【讨论】:

  • 谢谢,希望有一些我错过的隐藏访问内置功能......无论如何,现在我只需将其余代码与此对齐
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-20
  • 2020-06-24
  • 1970-01-01
  • 1970-01-01
  • 2022-11-25
相关资源
最近更新 更多