C# ComboBox 下拉框实现搜索

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

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

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

// 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图片展示一下实现后的效果的,但是数据不方便公开,希望大家多多谅解。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值