DEV ComBoxEdit實現模糊檢索數據


   這幾天老大叫我修改一下項目中LookUpEdit控件的下拉選擇功能,實現模糊檢索數據,經過一番研究,發現LookUpEdit控件只能實現部分模糊檢索數據功能,也就是它的檢索索引是從第一位開始,也就是模糊檢索數據的時候,用戶必須從頭開始檢索,這樣給用戶不友好,如果只知道其中的某些關鍵字則實現不了。如下圖:

查詢了資料后,發現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
            }
           
        }
    }
}

  運行效果如下圖:

 

小弟做的比較粗糙,希望大蝦們多多指點。

     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM