我有一个列表框,其中项目从数据库加载,当用户在文本框中键入任何内容时,列表框应搜索输入的起始字符并在文本框中显示。
例如:
用户在文本框中输入“A”后,所有从“A”开始的记录都应显示在列表框中。
当用户选择记录并按Enter键时,应在文本框中输入该记录
此外,当用户从鼠标单击记录时,该记录应在文本框中输入。
我不想使用文本框自动完成模式
如何在C#中执行此操作?
提前致谢
答案 0 :(得分:1)
列表框本身不支持开箱即用的这种过滤行为。您最好的选择是自己进行过滤,每次文本框中的文本更改都会对数据源执行搜索并将结果提供给列表框。
只要您的数据源(在这种情况下数据库中的项目)不是巨大的,您就可以通过缓存所有项目并进行内存搜索来逃避它。在启动时获取所有项目,然后使用内存列表进行搜索。如今处理能力不是问题,但这完全取决于您目前的情况。
我不知道您的数据源有多大&您的架构/基础架构是什么,但对数据库执行每次“增量”搜索可能不是最快的选择。对于这种过滤机制,速度至关重要。
如果内存列表,或者每次都没有访问数据库,那么Lucene.NET可能是性能最佳的选项。 Lucene.NET已经用于创建数据索引并对这些索引执行超快速搜索。缺点是你必须创建一个数据索引,并在数据源发生变化时保持最新状态,好处是它的速度令人难以置信。 (不开玩笑:)
链接到Lucene.NET: http://incubator.apache.org/projects/lucene.net.html
答案 1 :(得分:1)
int index = listbox.FindString(textbox.Text);
if (0 <= index)
{
listbox.SelectedIndex = index;
}
编辑:meh,根据标题问题回答,不幸的是,这个问题与实际问题相反,是完全独立的。请忽略......