C#中如何通过,TextBox+ListBox实现自动匹配功能?

C#实现,WinForm程序.

程序中有一个TextBox和ListBox
ListBox内有近万条数据项

我要实现当在TextBox内输入文本后,如果ListBox内有这个文本,则选择到那条记录。

我的实现思路是在TextBox的Changed事件中遍历ListBox所有项。

不过我觉得这个实现方法对于数据多的情况下可能会影响程序性能。
请问大家有没有什么好的实现思路呀?
------------------
由于程序须要必须要在界面内显示一个列表(所以我选择了ListBox),列表内有很多数据库(近万条)因为数据过多不方便选择,所以我加了一个TextBox来检查检索数据.就是这样。

我知道数据量大的话用ListBox不适合,但是不用ListBox又有什么可以实现在界面中显示一个列表呢?GridView肯定不适合,因为我要显示的内容就只有一列。

首先你得想法是对的。

想提高性能只能改善遍历方法了。而且不建议你使用TextBox的Changed事件,你写一个字他就遍历一次,会死人的。

你还可以为ListBox建立关键字List,这样遍历会容易一些。

补充:
你的设计中〉〉ListBox内有近万条数据项
你的ListBox是让人用的么,晕死,你如果看到上万条的ListBox,也会头疼,不想用吧。
我建议你修改一下。便于实现,而且还不会让ListBox流于形式。

问题补充:一楼的朋友,可以说的详细一点吗?
回答:我觉得我说得挺详细的啊。呵呵
如果让我设计,我不会用ListBox放上万条数据,如果这样做,ListBox有还不如没有呢。我会做一个Textarea,当用户输入完要检索的关键字,我就去数据库(也可以是你的内存了),去查找所有的相匹配的条目,然后在Textarea内作显示。一次显示多个,再按照匹配度的高低作递减排序。
你的做法很像我以前做的答题器。

问题补充:回答一楼:我的程序设计思路是没问题的,所以你不用考虑我程序设计的实现问题,之所以用TextBox就是因为ListBox内数据太多,所以才用一个TextBox检索数据呢!
回答:正如你所说,你都觉得ListBox数据太多用起来麻烦,所以要做一个TextBox来检索。
恩,你都觉得麻烦的功能,怎么能让用户觉得好用呢?我没有要批判你的设计,正如我第一句说得你的想法没有问题。我只是按照你的要求说明了我的想法而已么。呵呵

问题补充:------------------
由于程序须要必须要在界面内显示一个列表(所以我选择了ListBox),列表内有很多数据库(近万条)因为数据过多不方便选择,所以我加了一个TextBox来检查检索数据.就是这样。

我知道数据量大的话用ListBox不适合,但是不用ListBox又有什么可以实现在界面中显示一个列表呢?GridView肯定不适合,因为我要显示的内容就只有一列。
回答:你做个链接弹出一个新dialog不是也挺好的么,然后把上万条数据排序后分页显示哦,每次加载的数据很少,速度也好保证。
关于这些数据你可以在数据库内对你要排序(查找)的列做索引。应该会有改善
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-03-18
如果真如LZ所说使用winform而不是webform的话

可以在TextBox的Changed事件中设置ListBox的SelectedValue 属性,时间消耗会比遍历小的多

不过同意LS的说法,用listbox存放数万条数据本就不合理

如果是数据库的话用DataGridView会方便的多

补充:
如果真如LZ所说是直接添加数据进入listbox的话,那么无法做到输入字母定位到相应选项,SelectedValue只能作到textbox和listbox中有完全相同是才能定位
还是很同意一楼的仁兄,如果数据量真有那么大的话,用listbox真的很不合适

问题补充:
你的方法是可以,不过由于程序须要,必须要即时显示匹配到的项(即在文本框内输入一个字符就在ListBox内找到匹配的项)

回答:
如果真要实现这样的功能的话,需要建立一个数据库,建表,表中就一个自增ID和一个value字段就可以,确保listbox中value不重复的话,就一个字段也行,然后在textbox的TextChanged事件中构造sql查询语句,where判断条件使用like进行模糊查找
select top(1) * from table where value like '%{0}%'
{0}代表textbox中的输入项
只需要返回第一个匹配项就可以了

继续补充:
如果必须要时事的话,免不鸟数据库操作,而且这样的程序运行效率确实不怎么样,但就目前来看,在必须用listbox的情况下,只有频繁的数据库查询操作能达到要求了本回答被网友采纳
第2个回答  2015-08-13
这个在客户端有脚本就可以实现,大致思路是这样的:
把所有需要自动完成的字符串组成一个数组,在TextBox里边响应keyup事件,在onkeyup函数中搜索输入的字符串和先前字符串数组的匹配,将匹配的结果在ListBox中显示出来就可以了
第3个回答  2008-03-19
你说的这种情况,网站上到是实例,例如:爱词霸(http://www.iciba.com),输入一个字,下拉框就显示相关匹配的数据..
不过,实现办法,我估计是像一楼那样写的

select * from table where value like '"+textBox.Text+"%'

以这个textBox里输入的字符开头的所有匹配字符

因为你的数据太多,所以建议你将这些代码
写进一个按钮事件里
第4个回答  2008-03-18
1多用一个ArratList放数据,用它的IndexOf()方法查对应列表中的序号。
2或英文数据考虑用ComboBox
相似回答