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图片展示一下实现后的效果的,但是数据不方便公开,希望大家多多谅解。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论