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

C#实现,WinForm程序.程序中有一个TextBox和ListBoxListBox内有近万条数据项我要实现当在TextBox内输入文本后,如果ListBox内有这个文... C#实现,WinForm程序.

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

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

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

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

我知道数据量大的话用ListBox不适合,但是不用ListBox又有什么可以实现在界面中显示一个列表呢?GridView肯定不适合,因为我要显示的内容就只有一列。
展开
 我来答
kinohl
2008-03-18 · TA获得超过404个赞
知道小有建树答主
回答量:421
采纳率:0%
帮助的人:282万
展开全部
首先你得想法是对的。

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

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

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

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

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

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

我知道数据量大的话用ListBox不适合,但是不用ListBox又有什么可以实现在界面中显示一个列表呢?GridView肯定不适合,因为我要显示的内容就只有一列。
回答:你做个链接弹出一个新dialog不是也挺好的么,然后把上万条数据排序后分页显示哦,每次加载的数据很少,速度也好保证。
关于这些数据你可以在数据库内对你要排序(查找)的列做索引。应该会有改善
Gankutsuou
2008-03-18 · TA获得超过252个赞
知道小有建树答主
回答量:135
采纳率:0%
帮助的人:207万
展开全部
如果真如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的情况下,只有频繁的数据库查询操作能达到要求了
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tn瓶邪
2015-08-13 · TA获得超过1881个赞
知道小有建树答主
回答量:610
采纳率:98%
帮助的人:111万
展开全部
这个在客户端有脚本就可以实现,大致思路是这样的:
把所有需要自动完成的字符串组成一个数组,在TextBox里边响应keyup事件,在onkeyup函数中搜索输入的字符串和先前字符串数组的匹配,将匹配的结果在ListBox中显示出来就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友f0c02d0
2008-03-19 · TA获得超过317个赞
知道小有建树答主
回答量:388
采纳率:0%
帮助的人:433万
展开全部
你说的这种情况,网站上到是实例,例如:爱词霸(http://www.iciba.com),输入一个字,下拉框就显示相关匹配的数据..
不过,实现办法,我估计是像一楼那样写的

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

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

因为你的数据太多,所以建议你将这些代码
写进一个按钮事件里
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
moneyin
2008-03-18 · TA获得超过1万个赞
知道大有可为答主
回答量:7930
采纳率:0%
帮助的人:2544万
展开全部
1多用一个ArratList放数据,用它的IndexOf()方法查对应列表中的序号。
2或英文数据考虑用ComboBox
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式