问题描述
现在想在winfrom中实现类似百度搜索栏一样的功能,就是当用户在输入文字后从数据库中提取相关数据前十条提示在下面。在网上也查找过资料,1、使用textbox的AutoCompleteMode为suggestAppend这样的属性,带来的问题就是无法根据用户的输入动态绑定前十条数据。如果通过textchanged来动态绑定数据,由于上面的属性会不停的触发textchanged事件。例如,数据库前里有aa,ab,ac,ad,abc当客户输入a,由于suggestAppend,就会变成aa,这时候触发textchanged,就会根据aa重新绑定数据源,那么客户永远无法选择到ab2、这时候我想到把AutoCompleteMode设置为suggest,这时候带来的问题是,当数据库里有中国,中华,中影,中央人民。当客户输入汉字中央,当中字进入textbox就会触发textchanged,开始重新绑定数据源,但之后的央就被“吃”了。也就是说用户只能一个字一个字的输入。3、后来我想自己做一个相同的效果的自定义控件,上面放一个textbox,下面放一个listbox,通过隐藏和高度计算以及显示来达到同样的效果,但带来的问题是控件不能超出窗体本身。如果有10条数据,listbox会很高,那么相对应的usercontrol也会很高。那么将这个自定义控件放到别的窗体的时候,就要求别的窗体也能容纳下这个用户控件。这时候用户在不使用的时候,只有一个文本框显示,而下面空着一大片地方给人很不舒服。就算动态控制高度,如果这个控件是放在一个本身就不高的panel里时候,无论如何也是显示不出来比较靠下的几行的。不知道各位高手有没解决方法,不胜感激
解决方案
解决方案二:
弹出一个window,只不过window只有一个下拉列表而已,至于怎么去控制这个弹出的window,你要做的事情还有很多。
解决方案三:
你先把所有数据加载到内存,然后输入时,从内存中过滤显示
解决方案四:
能不能少有一些提示呢?比如,统计一下用户的输入的频率,只显示频率最高的前10个!或者是有一定关联的,不过这个就太复杂了!
解决方案五:
引用2楼的回复:
你先把所有数据加载到内存,然后输入时,从内存中过滤显示
求思路,现在貌似不是数据源的来源问题,而是控件机制的问题
解决方案六:
比如我们做股票软件,你输入股票代码就会列出股票,程序启动时,就会把所有股票列表加载到内存,当你输入时,就会遍历列表找到符合条件的股票,当做数据源绑定到显示列表
解决方案七:
引用5楼的回复:
比如我们做股票软件,你输入股票代码就会列出股票,程序启动时,就会把所有股票列表加载到内存,当你输入时,就会遍历列表找到符合条件的股票,当做数据源绑定到显示列表
我现在不是数据源的问题,而是获得数据源绑定之后的效果无法实现的问题