我在Access中有一个简单的组合框,它作为结果集持有者,包含两列id和name。
我开发了一个简单的搜索功能, 即用户在文本框中键入关键字,组合框在搜索子字符串后返回结果
示例:
TXT BOX输入: App
Combobox结果:
ID名称
1 Cinnamon Apple
2 Apple Candy Box
42 Carton of Apples
54 iphone App
6 App Store
现在当我在结果中搜索组合框并输入“i”时,我希望从下拉列表中选择“iphone App”,但没有任何反应,因为它正在搜索第一列,即ID
那么如何搜索名称并自动完成组合框呢?或按第二栏搜索
此外,显示ID非常重要,如果我隐藏ID列,我可以通过名称进行搜索,因为它是结果集中唯一的列。
答案 0 :(得分:1)
隐藏ID是完成所需内容的最简单方法,但我知道您说您不想隐藏ID字段。
我认为可以做你想做的事。基本上,在每个按键上,您需要将组合框的RowSource重置为仅过滤到与用户按键匹配的项目。根据我的经验,这在用于过滤的下拉菜单中效果最佳,而不是用于数据输入的下拉菜单,尤其是在使用连续或数据表格式时。这样做有很多陷阱和注意事项。除非你是一位经验丰富的VBA程序员,否则我不能真正推荐这样做。我自己的实现使用了很多事件来使它工作,包括Enter,KeyUp,KeyDown,KeyPress和AfterUpdate。我还使用了一个计时器,这样我就可以累积他们的按键,只有在没有按键的300ms之后才能更改行源。我还使用ADO和Disconnected Recordset,这样我就可以过滤记录集而不再调用数据库(以效率和“保持线路冷却”的名义)。
如果你想要一些代码,我在UtterAccess开发这个想法的早期就发布了一个非常基本的版本。我认为它可能会出现问题,而且想要显示ID字段可能无法正常工作。自从我最初发布代码以来,我必须在我的一个项目上正常工作。
http://www.utteraccess.com/forum/Autocomplete-Autosugges-t1986007.html
答案 1 :(得分:0)
解决方法是在Combobox中显示名称和ID,所以当我开始在Combobox中输入时,它会默认自动填充名称而不是ID。