是否可以通过组合框值列表进行排序?

Posted

技术标签:

【中文标题】是否可以通过组合框值列表进行排序?【英文标题】:Is it possible to order by a combo box value list? 【发布时间】:2015-09-14 09:39:57 【问题描述】:

我正在使用 Access,我正在编写一个 SQL 查询,我想在其中按组合框值列表序列进行排序。例如,如果行源类型的组合框列表:值列表和行源:星期一,星期二,星期三等......

将根据组合框中的顺序而不是字母顺序进行排序。

【问题讨论】:

【参考方案1】:

按照你写的方式,答案是“不”。不是动态的。

您应该将组合框项目存储在表格中。 从不使用值列表是一个好主意,这正是你不应该这样做的明显原因之一。

将值存储在表中,并使用排名字段。像这样:

ComboName   ComboValue  ComboRank
cboDays     Monday          1
cboDays     Tuesday         2
cboDays     Wednesday       3
cboDays     Thursday        4
cboDays     Friday          5
cboDays     Saturday        6
cboDays     Sunday          7

现在,对于您的组合框的行源,使用这个:

SELECT ComboRank, ComboValue 
FROM tblCombos 
WHERE ComboName = "cboDays" 
ORDER BY ComboRank; 

然后,在组合框中设置以下属性:

Column Count: 2
Column Widths: 0, 1
Bound Column: 2
Limit To List: Yes

如果您有任何其他组合框,请将它们添加到您的 tblCombos 并将 ComboName 更改为您的组合框的名称,并相应地添加值和排名。

您的数据表应该存储 ComboValue(理想情况下,您实际上使用 ID 字段,以便尽可能少地存储信息)。因此,您要做的就是在 tblCombo 上左加入以获得您的排序顺序:

Select MyTable.*, tblCombo.ComboRank 
from MyTable
Left Join tblCombo 
on MyTable.DayValue = tblCombo.ComboValue
Order By tblCombo.ComboRank

这是您将编写的查询以显示所有数据,按组合框的顺序排序。显然,您需要将“MyTable.DayValue”更改为您的表和字段的实际名称。

【讨论】:

【参考方案2】:

您可以使用 IIF 来设置顺序。

ORDER BY IIf([FIELD]="Monday", 0, IIf([Status]="Tuesday", 1, 2))

因此您可以在 vba 中构建 SQL,从 ComboBox 中获取值并将其构建到您的 ORDER BY 子句中。

假设你的组合叫做 cboDays

您可以循环组合并获取值。

Dim strOrderBy As String
Dim intCounter As Integer
For intCounter = 0 To cboDays.ListCount - 1
  Debug.Print cboDays.ItemData(intCounter)
  strOrderBy = strOrderBy & "IIf([FIELD]="& Chr(34) & cboDays.ItemData(intCounter) & Chr(34) & ", " & i & ", "
Next

'Remove the last comma
Dim intOBLen As Integer
intOBLen = Len(strOrderBy)
strOrderBy = Left(strOrderBy, intSSLen - 1)

strOrderBy = "ORDER BY " & strOrderBy & ")"

然后将其添加到您的其余 SQL 中,并将表单的 RowSource 设置为此 SQL。

【讨论】:

以上是关于是否可以通过组合框值列表进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

Ext JS 组合框值在模糊后重置为错误值

访问 VBA - 使用 VBA 的 SQL 语句使用文本框组合框值在表单上填充列表框 OR

根据组合框选择 C# 更改组合框值

ASP.NET MVC 组合框值加载

Excel VBA检查各种组合框中是不是存在值,然后添加相应的文本框值

Datagridview_2 组合框值在 C# 中无效