這幾天老大叫我修改一下項目中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
}
}
}
}
運行效果如下圖:

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