DEV ComBoxEdit实现模糊检索数据

摘要:
ComBoxEdit控件可以自由输入值,而不受数据源的影响。现在让我们采用我的方法:根据用户输入的值过滤ComBoxEdit的数据源,然后将其重新绑定到控件。让我们从代码开始。

这几天老大叫我修改一下项目中LookUpEdit控件的下拉选择功能,实现模糊检索数据,经过一番研究,发现LookUpEdit控件只能实现部分模糊检索数据功能,也就是它的检索索引是从第一位开始,也就是模糊检索数据的时候,用户必须从头开始检索,这样给用户不友好,如果只知道其中的某些关键字则实现不了。如下图:

DEV ComBoxEdit实现模糊检索数据第1张

查询了资料后,发现LookUpEdit不支持自由输入,所以只好用它的兄弟控件ComBoxEdit控件。ComBoxEdit控件能够不受数据源的影响而自由输入值,现在就来说下我的处理思路:根据用户输入的值,对ComBoxEdit的数据源做过滤,然后重新绑定到控件,废话不多说了,直接上代码吧。

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;
using DevExpress.XtraEditors.Controls;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        DataTable dt = new DataTable();
        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                
                BindData();
            }
            catch (Exception)
            {
                
                //TODO
            }
           
        }
       /// <summary>
       /// 给全局dt复制,这里可以是sql语句,得到table后循环table绑定数据到控件
       /// </summary>
        private void BindData()
        {
            dt.Columns.Add(new DataColumn("value", typeof(string)));
            for (int i = 0; i < 100; i++)
            {
                DataRow dr = dt.NewRow();               
                dr["value"] = i.ToString();
                dt.Rows.Add(dr);
                this.comboBoxEdit1.Properties.Items.Add(i);//绑定数据到控件                
            }
            this.lookUpEdit1.Properties.DataSource = dt;
            this.lookUpEdit1.Properties.ValueMember = "value";
            this.lookUpEdit1.Properties.DisplayMember = "value";
            this.lookUpEdit1.Properties.ShowHeader = false;


           
        }


        private void comboBoxEdit1_KeyUp(object sender, KeyEventArgs e)
        {
            try
            {
                string str = comboBoxEdit1.Text.ToString();
                //if (str == "")
                //    return;
                comboBoxEdit1.Properties.Items.Clear();//无论有没有过滤,都要清空原来的值
                string s = "value like '%" + str + "%'";
                DataView v = dt.DefaultView;
                v.RowFilter = s;

                DataTable dtt = v.ToTable();
                if (dtt.Rows.Count > 0)//如果输入的值过滤后有满足的值,则加载满足条件的值,否则加载全部
                {
                    for (int i = 0; i < dtt.Rows.Count; i++)
                    {
                        this.comboBoxEdit1.Properties.Items.Add(dtt.Rows[i]["value"].ToString());
                    }
                }
                else
                {
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        comboBoxEdit1.Properties.Items.Add(dt.Rows[i]["value"].ToString());
                    }
                }
            }
            catch (Exception)
            {
                
                //TODO
            }
           
        }
    }
}

运行效果如下图:

DEV ComBoxEdit实现模糊检索数据第2张

小弟做的比较粗糙,希望大虾们多多指点。

免责声明:文章转载自《DEV ComBoxEdit实现模糊检索数据》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇(转)F5:健康检查配置指南(TCP+HTTP)MFC自绘控件学习总结第二贴下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

PostGIS数据库导入SHP数据

1 - 通过QGIS数据库管理工具将shp导入到postgis数据库 选择数据源中postgis对应的数据库schema(架构),然后选择导入图层或文件,弹出导入矢量图层面板。 关于选项的说明: 1) 源空间参考与目标空间参考无特殊需要,应当与数据源保持一致 2) 编码默认即可,不进行选择,如选择编码UTF-8,会导致中文乱码。 3) 需要注意源shp...

/dev/null--Linux系统黑洞,解决控制台的刷屏问题

通常控制台在执行某个jar包时,屏幕会刷个不停,直到程序执行完毕,类似这种: 那么就可以编写一个脚本,把输出的内容全部扔进“黑洞”。此脚本模拟在hadoop102和hadoop103两台主机上循环执行jar文件: #!/bin/bash for i in hadoop102 hadoop103 do ssh $i "java -jar /opt/...

C#WinformSettings.setting配置

以下是学习笔记: 参考:https://blog.csdn.net/weixin_42451919/article/details/102819404?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-0.no_search_link&s...

mfc c++ system调用 控制台窗口

c++代码中可以使用system系统调用,很方便,例如我经常用system("copy C:\A\*.txt d:\A"),注意\不能写成/。 将上述语句放在c++代码中,没有问题。程序运行时会弹出控制台窗口。 如果只想使用system功能而不想显示控制台窗口,例如在MFC程序中,可以使用WinExec函数,上述代码可以写成 WinExec("cmd.ex...

Bartender 使用 Excel xlsx 数据库时出现 0x800A0E7A

Bartender 使用 Excel 数据库时出现 0x800A0E7A 这是因为没有装 数据库驱动的原因。 安装微软的驱动就可以。 注意是安装 32 位的驱动。 https://www.microsoft.com/zh-TW/download/details.aspx?id=13255...

GIS中的数据库.gdb与.mdb的区别

gdb是文件地理数据库,mdb是个人地理数据库,都是数据库文件类型。 个人地理数据库,是以access数据库为基础的个人将数据库格式mdb,可以存储不超过2G的文件,只适合Windows系统下; 文件数据库是在文件系统文件夹中保存的各种类型的GIS数据集的集合。 参考文章 GIS中的数据库.gdb与.mdb的区别在哪,m892832piczpec5。...