自带模糊查询的COMBOX

先定义一个组件,集成自Combox:

/// <summary>
    /// 自带模糊查询的COMBOX
    /// </summary>
    public partial class ComboxEX : ComboBox
    {
        /// <summary>
        /// 自带模糊查询的COMBOX
        /// </summary>
        public ComboxEX()
        {
            InitializeComponent();
        }

        public DataTable DtBase { get; set; }

        public List<string> LstSearchFields;

        public ComboxEX(IContainer container)
        {
            container.Add(this);

            InitializeComponent();
        }

        /// <summary>
        /// 绑定数据
        /// </summary>
        /// <param name="tb">数据</param>
        /// <param name="disName">显示列</param>
        /// <param name="vlName">值列</param>
        /// <param name="searchFields">模糊查询匹配的列集合</param>
        public void BindData(DataTable tb,string disName,string vlName,List<string> searchFields)
        {
            this.LstSearchFields = searchFields;
            this.DisplayMember=disName; 
            this.ValueMember=vlName;
            this.DtBase = tb;

            this.DataSource = tb;
        }

        protected override void OnTextUpdate(EventArgs e)
        {
            DataTable dt = this.DtBase.Clone();

            var txt = this.Text.Trim();


            if (string.IsNullOrEmpty(txt))
            {
                //清空了条件
                dt = this.DtBase.Copy();

            }
            else
            {
                string fl = "";
                foreach(string s in this.LstSearchFields)
                {
                    fl += (fl==""?"":" or ") +s + " like '%"+ this.Text.Trim().ToUpper() + "%' ";
                }

                this.DtBase.DefaultView.RowFilter = fl;
                dt = this.DtBase.DefaultView.ToTable();

               
            }

            this.DataSource = dt;

            this.DroppedDown = true;

            this.Text = txt;
            this.SelectionLength = 0;
            //设置光标位置,否则光标位置始终保持在第一列,造成输入关键词的倒序排列
            this.SelectionStart = this.Text.Length;

            
        }


    }

调用,可以直接从工具栏,拉到界面上;

调用先初始化数据:

 private void BingComboxEx()
        {
            DataTable tb = new DataTable();
            tb.Columns.Add("CODE", typeof(string));
            tb.Columns.Add("NAME", typeof(string));
            tb.Columns.Add("PYM", typeof(string));
            tb.Columns.Add("MEMO", typeof(string));

            tb.Rows.Add(new object[] {"S001","螺丝","LS","A" });
            tb.Rows.Add(new object[] { "S002", "大螺丝", "DLS", "A" });
            tb.Rows.Add(new object[] { "S003", "小螺丝", "XLS", "B" });
            tb.Rows.Add(new object[] { "D004", "中螺丝", "ZLS", "B" });
            tb.Rows.Add(new object[] { "D005", "大螺母", "DLM", "C" });
            tb.Rows.Add(new object[] { "D006", "小螺母", "XLM", "C" });

            //初始化数据 ,显示字段、值字段、模糊查询匹配的字段集合
            this.comboxEX1.BindData(tb, "NAME", "CODE", new List<string>() { "NAME", "CODE", "PYM", "MEMO" });

        }

效果图:

c#自定义模糊查询Combox实现_数据