本人新手,没有更好的实现方法,如果大家有更好的方法,请多多指教!

步骤一:这个是加载窗口时候的部分代码,可忽视

// 这个是窗口加载时候的部分代码,可以忽略

// ComboBox 指定数据源 (DeptDs是一个全局变量)

cbDept.DataSource = DeptDs.Tables[0];

// 指定 下拉框 显示内容的值

cbDept.ValueMember = "id";

// 指定 下拉框 显示的内容

cbDept.DisplayMember = "name";

// 指定当前选中的是哪个一个

cbDept.SelectedValue = ProtalInformation.OrgID;

步骤二:在 ComboBox 下拉框添加一个键盘事件 

步骤三:实现下拉框搜索,对应 步骤二 键盘事件

// KeyUp 事件

private void cbDept_KeyUp(object sender, KeyEventArgs e)

{

// 如果是回车的话,就选中

if (e.KeyCode == Keys.Enter) {

cb.DroppedDown = false;

return;

}

// 判断如果是某些按键,就不触发

if (e.KeyCode == Keys.ShiftKey || e.KeyCode == Keys.CapsLock || e.KeyCode ==Keys.Back || e.KeyCode == Keys.Down || e.KeyCode == Keys.Up) {

return;

}

// 获取需要筛选的内容

string str = cbDept.Text;

// 从datatable中筛选,再次声明一下 DeptDs 是个全局变量

DataRow[] drs = DeptDs.Tables[0].Select($"name like '%{str}%'");

// 克隆表

DataTable dt = DeptDs.Tables[0].Clone();

// 将数据添加到表中

foreach (DataRow dr in drs) {

dt.Rows.Add(dr.ItemArray);

}

// 展开下拉列表

cbDept.DroppedDown = true;

// 赋值给下拉框

cbDept.DataSource = dt;

// 赋值选项的内容,变来变了去不好看

cbDept.SelectedValue = "";

// 将输入的内容重新赋值给下拉框

cbDept.Text = str;

// 这个是输入的光标位置,要不要会跑到最左边

cbDept.SelectionStart = str.Length;

}

本来想弄个GIF图片展示一下实现后的效果的,但是数据不方便公开,希望大家多多谅解。

精彩内容

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: