如何在Access窗体中对依赖Rangetabel的ComboBox指定排序?
解决ComboBox下拉列表排序问题
你的问题出在用了窗体的排序设置Me.OrderBy,但这不会影响ComboBox的下拉列表顺序,应该直接在给ComboBox绑定的SQL查询里加上排序规则。
修改方法:
把排序逻辑直接写到SQL语句的末尾,用ORDER BY指定你想要的排序字段和顺序(升序ASC/降序DESC,默认升序可省略)。
比如你想按[Accessories 1 - SKU]升序排列,修改后的代码如下:
' Update Accessories_1 q = "SELECT [Id],[Accessories 1],[Accessories 1 - SKU],[Accessories 1 - option],[Accessories 1 - info] " & _ "FROM [Accessories_1] " & _ "WHERE [Accessories 1 - option] LIKE '*" & Me.Rangetabel_Label.Column(2) & "*' " & _ "ORDER BY [Accessories 1 - SKU] ASC" ' 添加排序规则 Me.Accessories1_Label.RowSource = q Me.Accessories1_Label.Requery Me.Accessories1_Label.Visible = True Me.Accessories1_SKU.Visible = True ' 删除原有的Me.OrderBy和Me.OrderByOn两行,这两句对ComboBox无效
自定义排序的额外说明
如果需要的不是字段默认的字母/数字顺序,而是自定义的特定顺序(比如按选项优先级排序),可以用CASE语句定义排序权重,示例如下:
q = "SELECT [Id],[Accessories 1],[Accessories 1 - SKU],[Accessories 1 - option],[Accessories 1 - info] " & _ "FROM [Accessories_1] " & _ "WHERE [Accessories 1 - option] LIKE '*" & Me.Rangetabel_Label.Column(2) & "*' " & _ "ORDER BY " & _ "CASE [Accessories 1 - option] " & _ "WHEN '优先级1' THEN 1 " & _ "WHEN '优先级2' THEN 2 " & _ "WHEN '优先级3' THEN 3 " & _ "ELSE 4 END ASC"
这样设置后,ComboBox的下拉列表就会按照你指定的顺序显示数据了。
内容的提问来源于stack exchange,提问作者RESKA DK
相关产品推荐
相关产品推荐

