效果图:
一开始,是拖个下拉框到窗体上,用dgv.controls.Add(combox)添加到表格里,在通过表格事件,触发时,改变下拉框的位置和大小,这样做,下拉框是会出现在表格里,但是有问题,不能通过键盘的下键进行快速筛选,当表格有多行时,在下拉框列按下键会先打开下拉框的选项列表,不过打开了又立马缩回去了,然后选中的下拉框就跳到一下行的下拉框去了。
 
本来想通过 表格 keydown事件 禁用 上下键,但测试时发现,在下拉框列按下键,还是会跳行,其他列的确不会在跳行了。所以这样做不得行。
 
后来,我想,加个panel panel里在加下拉框,把panel添加到表格里,这样还是不得行。
 
再后来,我想,直接在表格上的下拉框列覆盖一个下拉框,但我发现,如果不用dgv.controls.add()方法添加下拉框,你在设计窗体时,把其他控件拖动到表格控件上,其他控件是会被遮住的,根本显示不了,所以这样做也不得行。
 
最后我想,那就把表格自带的combox列扩展成能输入的下拉框列,最后这样做就行了。扩展表格自带的下拉框列是我找的网上的代码:c#——Winform DatagridView 扩展支持combobox列自定义DropDownStylehttps://blog.csdn.net/Shiyaru1314/article/details/52043688
代码拿过来,改了一点点
combo.DataSource == null 改成了combo.Items != null 删了 combo.DropDownHeight = 1;这句
 
然后是我自己写的代码

  //模糊查询Combobox
public void selectCombobox(ComboBox cb, List<string> listOnit)
{
//输入key之后返回的关键词
List<string> listNew = new List<string>();
//清空combobox
cb.Items.Clear();
//清空listNew
listNew.Clear();
//遍历全部备查数据
foreach (var item in listOnit)
{
if (item.ToLower().Contains(cb.Text.ToLower()))
{
//符合,插入ListNew
listNew.Add(item);
}
}
//combobox添加已经查询到的关键字
cb.Items.AddRange(listNew.ToArray());
//设置光标位置,否则光标位置始终保持在第一列,造成输入关键词的倒序排列
cb.SelectionStart = cb.Text.Length;
//保持鼠标指针原来状态,有时鼠标指针会被下拉框覆盖,所以要进行一次设置
Cursor = Cursors.Default; }
做的时候,一定要保持对combox的引用,不然就会出现内存错误的异常,因为combox会释放掉。
private void DataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
var EditingControl = e.Control as ComboBox; if (EditingControl != null)
{
//用个集合成员保持对combox的引用
if (ListCbx.Contains(EditingControl)) { EditingControl = ListCbx.Find(x => x == EditingControl); }
else
{
EditingControl.Items.Clear();
EditingControl.Items.AddRange(new String[] { "Beijing", "Shanghai", "Shanghaiw", "Shangwhai", "Shawnghai", "Sheenghai", "Shangwwhai", "Guangzhou", "Wuhan", "李斌一", "李斌二", "Wuha", "Shenzhen" });
ListCbx.Add(EditingControl);
EditingControl.TextUpdate += EditingControl_TextChanged;
EditingControl.KeyDown += EditingControl_KeyDown;
}
}
}

【winform】解决datagridview里放combox,combox不能按下键快速选择的问题的更多相关文章

  1. 关于datagridview里使用combox的总结

    最近写的程序中需要在DataGridView中使用下拉选择的功能,首选方案是列的ColumnType属性 使用EditingControlShowing事件, if (e.Control is Com ...

  2. winform中dataGridView单元格根据值设置新值,彻底解决绑定后数据类型转换的困难

    // winform中dataGridView单元格在数据绑定后,数据类型更改困难,只能迂回实现.有时候需要将数字变换为不同的文字描述,就会出现int32到string类型转换的异常,借助CellFo ...

  3. 解决数据库datatime数据在DataGridView里不显示秒的解决

    在数据库中正确显示有分有秒,到dataset里的时候也有,但绑定到DataGridView里的时候就没有秒,解决办法: dataGridView1.Columns["record_time& ...

  4. k8s集群启动了上万个容器(一个pod里放上百个容器,起百个pod就模拟出上万个容器)服务器超时,无法操作的解决办法

    问题说明: 一个POD里放了百个容器,然后让K8S集群部署上百个POD,得到可运行上万个容器的实验目的. 实验环境:3台DELL裸机服务器,16核+64G,硬盘容量忽略吧,上T了,肯定够. 1.一开始 ...

  5. WinForm Control - DataGridView

    http://blog.csdn.net/fangxing80/article/details/1561011 .NET 2.0 - WinForm Control - DataGridView 编程 ...

  6. C# Winform中DataGridView的DataGridViewCheckBoxColumn使用方法

    下面介绍Winform中DataGridView的DataGridViewCheckBoxColumn使用方法: DataGridViewCheckBoxColumn CheckBox是否选中 在判断 ...

  7. [UWP]为什么ContentControl的ContentTemplate里放两个ContentPresenter会出问题(绕口)

    原文:[UWP]为什么ContentControl的ContentTemplate里放两个ContentPresenter会出问题(绕口) 1. 简单的HeaderedContentControl 上 ...

  8. WinForm中DataGridView复制选中单元格内容解决方案

    WinForm中DataGridView鼠标选中单元格内容复制方案 1.CTR+C快捷键复制 前提:该控件ClipboardCopyMode属性设置值非Disable: 2.鼠标框选,自定义代码实现复 ...

  9. WinForm使用DataGridView实现类似Excel表格的查找替换

    在桌面程序开发过程中我们常常使用DataGridView作为数据展示的表格,在表格中我们可能要对数据进行查找或者替换. 其实要实现这个查找替换的功能并不难,记录下实现过程,不一定是最好的方式,但它有用 ...

  10. winform中dataGridView隔行显示不同的背景色,鼠标移动上显示不同颜色,离开后变回原色

    winform中dataGridView隔行显示不同的背景色,鼠标移动上显示不同颜色,离开后变回原色 先设置奇数行颜色,这个有个自带的属性AlternatingRowsDefaultCellStyle ...

随机推荐

  1. 【FAQ】接入华为帐号服务过程中常见问题总结

    华为帐号服务(Account Kit)为开发者提供简单.安全的登录授权功能,用户不必输入帐号.密码和繁琐验证,就可以通过华为帐号快速登录应用,即刻使用App.这篇文章收集了开发者们集成华为帐号服务中会 ...

  2. 生成 MFC ActiveX (OCX)时,报错:MSB801:未能注册输出

    我们在生成 ocx 控件时,报错:MSB801:未能注册输出,如下图: 解决方法: 1.打开 项目属性 -> 链接器 -> 常规  :  逐用户重定向 改为  是 2. 重新生成 如果此时 ...

  3. Taurus.MVC 性能压力测试(ap 压测 和 linux 下wrk 压测):.NET Core 版本

    前言: 最近的 Taurus.MVC 版本,对性能这一块有了不少优化,因此准备进行一下压测,来测试并记录一下 Taurus.MVC 框架的性能,以便后续持续优化改进. 今天先压测 .NET Core  ...

  4. 深入解析C++的auto自动类型推导

    关键字auto在C++98中的语义是定义一个自动生命周期的变量,但因为定义的变量默认就是自动变量,因此这个关键字几乎没有人使用.于是C++标准委员会在C++11标准中改变了auto关键字的语义,使它变 ...

  5. 基于 Scriptable 从零开始美化iOS桌面(集合篇)

    Scriptable 脚本合集 iOS桌面组件神器(Scriptable)原创脚本,精美作品收集.分享! 如果喜欢,欢迎点个 ️ Star ️ 给予小支持,感谢您的使用!喜欢这个项目?有好的脚本?请考 ...

  6. 保护C#代码的艺术:深入浅出代码混淆技术

    摘要 在C#开发中,代码的保护是一个不可忽视的问题.本文深入探讨了几种常用的C#代码混淆工具,帮助开发者理解如何有效地保护代码不被反编译.同时,本文也对混淆技术的优缺点进行了分析,并提供了一些实际使用 ...

  7. python实现:有一个列表为num_list,找到一个具有最大和的连续子列表,返回其最大和。

    # 有一个列表为num_list,找到一个具有最大和的连续子列表,返回其最大和.# 示例:# 输入: [-3,1,-1,6,-1,2,4,-5,4]# 输出: 11# 解释: 连续子数组 [6,-1, ...

  8. @EnableDiscoveryClient 注解如何实现服务注册与发现

    @EnableDiscoveryClient 是如何实现服务注册的?我们首先需要了解 Spring-Cloud-Commons 这个模块,Spring-Cloud-Commons 是 Spring-C ...

  9. CSS 样式清单整理(二)

    16.元素占满整个屏幕 heigth如果使用100%,会根据父级的高度来决定,所以使用100vh单位. .dom{ width:100%; height:100vh; } 17.CSS实现文本两端对齐 ...

  10. 纯CSS实现带小三角提示框

    要实现在页面上点击指定元素时,弹出一个信息提示框.在前面的文章中,我们已经简单介绍了如何使用纯 CSS 创建一个三角形.本文在此基础上,记录如何使用 CSS 创建带三角形的提示框. 实现的原理是创建一 ...