效果图:
一开始,是拖个下拉框到窗体上,用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. 深度剖析:Dubbo使用Nacos注册中心的坑

    2020年笔者在做微服务部件升级时,Dubbo的注册中心从Zookeeper切换到Nacos碰到个问题,最近刷Github又有网友提到类似的问题,就在这篇文章里做个梳理和总结. 1.问题描述 前几年我 ...

  2. Ascend C 自定义算子 Kernel Launch调用入门

    本文分享自华为云社区<Ascend C 自定义算子 Kernel Launch调用入门>,作者: jackwangcumt. 1 Kernel Launch概述 根据官方说明文档的介绍,A ...

  3. Qt5自带的日志功能,将日志输出到文件

    #include "QtWidgetsApplication1.h" #include <QtWidgets/QApplication> #include <Qt ...

  4. 全新适配鸿蒙生态,Cocos引擎助力3D应用开发

    原文链接:https://mp.weixin.qq.com/s/rCACesJ4QxRuU2NRjIvbDQ,点击链接查看更多技术内容: 一.适配HarmonyOS背景 HarmonyOS 3.1版本 ...

  5. identity4 系列————用户数据持久化篇[六]

    前言 前面的例子已经将各种情形下的例子已经介绍了一遍,那么后面就是用户数据持久化该如何处理了. 正文 例子位置: https://github.com/IdentityServer/IdentityS ...

  6. 在ashx中如何使用session

    前言 都是写陈年往事罢了,如何在ashx 使用session 正文 我们知道在ashx 中使用context.Session 我们即读取不到值,同时设置完也感觉无效. 原因是我们在ashx 中使用的s ...

  7. 函数模板 及显式具体化(C++)

    函数模板 将同一种算法应用与不同类型的函数时 #include<iostream> #include<string> template <typename T> v ...

  8. 第三課:信道学习Source Connect Reader & Destinations File Writer

    第一步: 切换到主信道(Channels)界面,右键点击新建信道(New Channel) 第二步 : 下面是设置一些信道概要(Summary)信息 其中summary(概要) 界面主要包含 信道名称 ...

  9. 基于 OPLG 从 0 到 1 构建统一可观测平台实践

    简介: 随着软件复杂度的不断提升,单体应用架构逐步向分布式和微服务的架构演进,整体的调用环境也越来越复杂,仅靠日志和指标渐渐难以快速定位复杂环境下的问题.对于全栈可观测的诉求也变得愈加强烈,Trace ...

  10. 从no-code到low-code:企业级hpaPaaS的未来

    简介: 本文将简单谈一谈基于 no-code > low-code > pro-code 渐进式思路的研发体系. 引子 宜搭负责人骁勇给我举过一个例子,我们小时候逢年过节穿的衣服,都是去裁 ...