C#中如何通过,TextBox+ListBox实现自动匹配功能?
展开全部
就像百度搜索框那种效果么?随便在文本中输入文本,然后在列表框中出现模糊匹配?
1.TextBox_TextChange事件,启动查询,SQL条件使用like模糊匹配
2.foreach遍历查询的结果,将结果加载至ListBox,在每次重新加载前清空列表
-------
数据多的话,最好在sql中加上top ?,即仅取前几行数据.
数据少的话,可以在窗体打开时就加载全部数据至集合,TextChange处理时遍历集合,查找包含输入文本的前N项,加载至列表框.
如果是B/S项目,需要ajax支持查询与加载列表框.
1.TextBox_TextChange事件,启动查询,SQL条件使用like模糊匹配
2.foreach遍历查询的结果,将结果加载至ListBox,在每次重新加载前清空列表
-------
数据多的话,最好在sql中加上top ?,即仅取前几行数据.
数据少的话,可以在窗体打开时就加载全部数据至集合,TextChange处理时遍历集合,查找包含输入文本的前N项,加载至列表框.
如果是B/S项目,需要ajax支持查询与加载列表框.
更多追问追答
追问
如何当删除textbox内的内容匹配值也随着改变,foreach遍历查询怎么写,没学过
追答
TextChange事件监控的是文本的变化,你追加或者退格都会启动.
///
/// 过滤——输入框文字改变
///
///
///
private void txtF_In_TextChanged(object sender, EventArgs e)
{
if (htSchNoLst.Count == 0)
{
return;
}
lbxF_Lst.Items.Clear(); //清空之前的匹配结果
int items = 0; //限制显示结果上限为10
foreach (object obj in htSchNoLst.Keys)
{
if (obj.ToString().Contains(txtF_In.Text.ToUpper()))
{
lbxF_Lst.Items.Add(obj.ToString());
items++;
}
if (items == 10)
{
break;
}
}
}
这是我项目中的一段代码,你可以看一下,业务就是查询到一堆单据后,将单据号加入集合,在文本框中输入单据号(不完全),,将包含输入内容的单据号前十个加载至列表框.
变量和控件都定义在方法外,不过应该不影响你看代码.
htSchNoLst是一个hashtable,key是单据号,value是绑定至datagridview后某个单据的首行索引
列表框点击的效果是,datagridview定位至这个单据的首行.
-------这个就是预加载的例子.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询