c#中combobox如何实现模糊查询,并能自动显示下拉列表

author author     2023-04-22     715

关键词:

1.用一个List<string> listOnit存放初始化数据,用一个List<string> listNew存放输入key之后,返回的数据。

2.用上面的listOnit初始化ComboBox数据源进行绑定。

3.在TextUpdate方法内部,添加实现方法。

首先进入方法,先清除ComboBox的内容,然后将输入的内容去listOnit初始化的数据中比对,找出对应数据,然后放入listNew存放数据,最后将listNew数据重新赋值给ComboBox。

 

后台代码实现:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace TimerDemo

    public partial class Form2 : Form

    

        //初始化绑定默认关键词(此数据源可以从数据库取)

        List<string> listOnit = new List<string>();

        //输入key之后,返回的关键词

        List<string> listNew = new List<string>();

 

        public Form2()

        

            InitializeComponent();

        

 

        private void Form2_Load(object sender, EventArgs e)

        

            //调用绑定

            BindComboBox();

        

        /// <summary>

        /// 绑定ComboBox

        /// </summary>

        private void BindComboBox()

        

            listOnit.Add("张三");

            listOnit.Add("张思");

            listOnit.Add("张五");

            listOnit.Add("王五");

            listOnit.Add("刘宇");

            listOnit.Add("马六");

            listOnit.Add("孙楠");

            listOnit.Add("那英");

            listOnit.Add("刘欢");

 

            /*

             * 1.注意用Item.Add(obj)或者Item.AddRange(obj)方式添加

             * 2.如果用DataSource绑定,后面再进行绑定是不行的,即便是Add或者Clear也不行

             */

            this.comboBox1.Items.AddRange(listOnit.ToArray());

        

 

        private void comboBox1_TextChanged(object sender, EventArgs e)

        

            /*

              

             * 不能用TextChanged操作,当this.comboBox1.DroppedDown为True时,选择项上下键有冲突

              

             */

 

        

 

        private void comboBox1_TextUpdate(object sender, EventArgs e)

        

            //清空combobox

            this.comboBox1.Items.Clear();

            //清空listNew

            listNew.Clear();

            //遍历全部备查数据

            foreach (var item in listOnit)

            

                if (item.Contains(this.comboBox1.Text))

                

                    //符合,插入ListNew

                    listNew.Add(item);

                

            

            //combobox添加已经查到的关键词

            this.comboBox1.Items.AddRange(listNew.ToArray());

            //设置光标位置,否则光标位置始终保持在第一列,造成输入关键词的倒序排列

            this.comboBox1.SelectionStart = this.comboBox1.Text.Length;

            //保持鼠标指针原来状态,有时候鼠标指针会被下拉框覆盖,所以要进行一次设置。

            Cursor = Cursors.Default;

            //自动弹出下拉框

            this.comboBox1.DroppedDown = true;

        

    

   


实现效果截图:

从左到右模糊查询:(例如输入:张)

可以得出正常模糊查询的结果。

从左到右模糊查询(例如输入:三)

实现过程中的问题:

  1.绑定数据一开始用的DataSource方式,但是写到下面重新给ComboBox设置数据源的时候,报错:不能为已经设置DataSource的combobox赋值。

      解决方式:将赋值方式改为:Item.Add(obj)或者Item.AddRange(obj)方式

  2.下拉框的内容一直在增加

      解决方式:当文本框文本改变时,清空下拉框的内容,然后再添加数据。

  3.输入文本改变时,没有自动弹出下拉框显示已经查询好的数据。

      解决方式:设置comboBox的DroppedDown 属性为True。

  4.ComboBox文本框改变事件一开始选择用的是TextChanged事件,但是当在界面用 上 下键盘选择时,出现bug,不能进行选择。

      解决方式:将文本框改变事件换为TextUpdate事件,然后添加实现方法。

  5.当在ComboBox输入内容时,内容文本是倒序输出的,光标位置始终在最前面。

      解决方式:设置光标的显示位置,this.comboBox1.SelectionStart = this.comboBox1.Text.Length;

  6.输入内容改变时,用鼠标选择下拉列表项的时候,鼠标指针消失,被下拉框覆盖掉。

      解决方式:设置鼠标状态为一开始的默认状态,Cursor = Cursors.Default;

参考技术A combobox没有这样的功能,都是自己实现的,比如在onchanged或者textchanged事件里做处理,即时改变combobox的内容,至于自动显示下拉列表,只要把dropped设成true就行了。本回答被提问者和网友采纳 参考技术B 模糊查询 用sql语句控制就行 like '%张%'
自动填充下拉列表这个得自己做算法.在Change()时间中写.实时查询,只加载赋值前几条到列表中
参考技术C 使用正则表达式做判断
public void ThinkInquire(DataSet dataset)

Regex r = new Regex(".*" + be_carNo.Text.Trim() + ".*");//正则表达式
for (int i = 0; i < dataset.Tables[0].Rows.Count; i++)

if (r.IsMatch(dataset.Tables[0].Rows[i]["carno"].ToString()))

be_carNo.Properties.Items.Add(dataset.Tables[0].Rows[i]["carno"]);//绑定下拉框的值




然后用判断做弹出和收回
if (be_carNo.Properties.Items.Equals(null)||be_carNo.Text.Trim()=="")

be_carNo.ClosePopup();//关闭下拉框
be_carNo.Properties.Items.Clear();

else
be_carNo.ShowPopup();//弹出下拉框


记得把控件的自我查询关闭
参考技术D OnChange,OnKeyDown,选一个事件,动态更新弹出的列表。

c#模糊查询带出下拉列表的问题

...?谢谢请教参考技术A这里说下思路把,实现模糊查询(combobox)类似IE地址栏自动出现匹配的下拉列表建议才用自定义控件来实现,通过一个TEXTBOX+ListBOX实现,或者重写Combobox。如果实现Combobox输入匹配,而不弹出列表的话可以通... 查看详情

combobox如何实现对数据库模糊查询!!!

...据库信息量比较大,所以不想刚开始就把所有选项加载到Combobox上,只是根据输入的内容自动进行模糊匹配列出下拉框选项,就像百度搜索一样的。是C#winform的参考技术A方案1:建议你将模糊搜索的事件放到一个按钮中执行,比... 查看详情

winform中combobox利用autocomplete属性实现模糊查询(有缺陷)

  上一篇文章是用ComboBox里面的原生事件实现模糊查询,操作比较灵活一些,但是收到评论说,利用AutoComplete属性就可以实现模糊查询,但是据本人所了解,AutoComplete虽然能够方便的实现模糊查询,但是有一定的缺陷,就是,... 查看详情

miniui-combobox如何实现对数据库模糊查询!!!

...据库信息量比较大,所以不想刚开始就把所有选项加载到Combobox上,只是根据输入的内容自动进行模糊匹配列出下拉框选项,就像百度搜索一样的。前台怎么做?onchang或textchanged事件不触发ifComboBox1.Text='宋体'thenRichedit1.SelAt... 查看详情

如何设计combobox的过滤功能,直接能模糊查找

参考技术A当值改变的时候,提取值并且提交模糊查询,再把模糊查询填充到控件就好了。流程就是这样,代码也不难实现了… 查看详情

如果实现在combobox控件输入框中输入值而下拉列表弹开并显示根据输入值模糊查询查询数据库中的内容呢?

在MicrosoftVisualStudio2008中,窗体应用程序,如果实现在combobox控件中输入框中输入值而下拉列表弹开并显示根据输入值模糊查询查询数据库中的内容呢?设计目的:为实现在下拉列表中,在输入框中输入身份证号码时,下拉列表会自动打开... 查看详情

实现combobox模糊查询的时候报错invalidargument=“0”的值对于“index”无效

因为要对combobox实现模糊查询,因为系统实现的匹配只能从左到右进行匹配,所以利用两个list来进行模糊匹配,主要代码如下:List<string>listOnit=newList<string>();//绑定原始数据源List<string>listNew=newL... 查看详情

怎样在winform内实现combobox模糊查询

...到项目下默认新建的Form1,双击进入设计界面,添加一个comboBox控件。然后单击ComboBox控件,右键选择属性在右边属性窗口,找到事件(图中的闪电形状图标),找到TextUpdate,双击添加此事件。6在设计界面Form1,按F7进入后台代码... 查看详情

combobox和combotree模糊查询

First/***combobox和combotree模糊查询*combotree结果显示两级父节点(手动设置数量)*键盘上下键选择叶子节点*键盘回车键设置文本的值*/(function(){//combobox可编辑,自定义模糊查询$.fn.combobox.defaults.editable=true;$.fn.combobox.defaults.filter=function(q... 查看详情

防止 System.Windows.Forms.ComboBox 的自动选择行为(C#)

】防止System.Windows.Forms.ComboBox的自动选择行为(C#)【英文标题】:PreventAutoSelectbehaviorofaSystem.Window.Forms.ComboBox(C#)【发布时间】:2014-10-3004:07:06【问题描述】:背景:我有一个Forms.ComboBox和一个DropDownStyle=DropDown。我不使用AutoComplet... 查看详情

easyuicombobox模糊查询

...发的攻城狮恐怕都遇到过这样一个问题,就是在新增页面combobox下拉框需要支持模糊查询,但是输入不是combobox中Data里面的值的时候,点击保存,依然是可以新增进去的,这样是肯定不行的,那这样是怎么解决的呢,本人就曾经用过一个很... 查看详情

devexpress选择框如何进行模糊查询

dev中有很多的选择框控件,但是没有发现能够实时模糊查询的选择框,lookupedit是在数据源不变情况下实现自动匹配,但很多时候数据量太大以至于我们没法先绑定数据源。这时我们需要一个能够实现实时匹配的SearchTextBox。这里... 查看详情

jdbc中如何实现模糊查询

情况如何再利用jdbc执行sql语句的时候,对于其他的句子的执行没什么太大的问题:加上占位符,然后设置占位符的值。但是在模糊查询的时候,一直都写不对,这里提供了两种可选的解决办法,以供参考。解决方法第一种:Strin... 查看详情

js如何实现模糊查询

就是类似于百度输入框那样,输入关键字,底下带出多条信息这是自动完成功能思路:当你输入一个字符之后(这个可以你自己定义变量来约束,随便几个),通过AJAX访问后台,查询到所有结果包含你输入的字符的一个结果集... 查看详情

关于c#的一个控件combobox的筛选问题

我已经在Combobox中添加了数据:“aaa,bbb,ccc,abc,adc,caa”现在我想实现它的筛选,比如:我在Combobox中输入“a”,凡是以“a”开头的那几个数据“aaa,abc,adc”,就会自动弹出,代码该怎么写?string[]arrs="aabb","aaabb","aabbc";comboBox1.AutoCompl... 查看详情

c#重写combobox实现下拉任意组件

一、需求C#种的下拉框ComboBox不支持下拉复选框列表与下拉树形列表等,系统中需要用到的地方使用了第三方组件,现在需要将第三方组件替换掉。二、设计基本思路:重写ComboBox,将原生的下拉部分屏蔽,使用toolStripDropDown制作... 查看详情

delphi中如何实现查询功能:如下介绍

用到ComboBox其Items有如图三条lines;用的是SQL数据库procedureTF_demo.Button3Click(Sender:TObject);//模糊查询beginadotable1.close;datasource1.DataSet:=adoquery1;iftrim(Edit1.Text)<>''thenbeginadoquery1.close;adoquery1.sql.clear;adoquery1.SQL.Add('select*frompeople&... 查看详情

如何在 C# 中获取 dataGridView 中所有 Combobox 列的显示成员?

】如何在C#中获取dataGridView中所有Combobox列的显示成员?【英文标题】:HowtogetDisplayMemberofAllComboboxcolumnsindataGridViewinC#?【发布时间】:2014-02-2717:00:25【问题描述】:我正在开发具有dataGridView的Windows窗体GUI。在dataGridView我有两列。... 查看详情