实现 DataGridView 下拉列表功能(C# WinForms)
本文介绍如何在 WinForms 中使用 DataGridViewComboBoxColumn 实现下拉列表功能,并通过事件响应来处理用户的选择。以下是实现步骤和示例代码。
1. 效果展示

该程序的主要功能是展示如何在 DataGridView 中插入下拉列表,并在选择某一项时触发事件。
2. 代码实现
使用 DataGridViewComboBoxColumn 控件来创建下拉列,下面是实现代码。该示例演示了在下拉框中选中某项时触发事件并显示选中的内容。代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;namespace DataGridViewComboBoxExample
{public partial class Form1 : Form{// 构造函数public Form1(){InitializeComponent();}// 窗体加载事件private void Form1_Load(object sender, EventArgs e){// 创建一个 DataGridViewComboBoxColumn 控件DataGridViewComboBoxColumn colShow = new DataGridViewComboBoxColumn();colShow.Name = "spaceType"; // 列名称colShow.HeaderText = "空间类型"; // 列头文本colShow.Width = 200; // 设置列宽colShow.Items.Add("选项一"); // 向下拉框添加选项colShow.Items.Add("选项二"); // 向下拉框添加选项colShow.DisplayIndex = 0; // 设置列的显示位置(第一列)// 将列插入到 DataGridView 的第一列dataGridView1.Columns.Insert(0, colShow);// 设置单击时直接显示下拉框,而非双击dataGridView1.EditMode = DataGridViewEditMode.EditOnEnter;// 添加三行数据dataGridView1.Rows.Add(); // 添加第一行dataGridView1.Rows.Add(); // 添加第二行dataGridView1.Rows.Add(); // 添加第三行// 为每一行的第一个单元格(即ComboBox列)设置默认值dataGridView1.Rows[0].Cells[0].Value = "选项一"; // 第一行dataGridView1.Rows[1].Cells[0].Value = "选项二"; // 第二行dataGridView1.Rows[2].Cells[0].Value = "选项一"; // 第三行}// 按钮点击事件:设置第一行第一列的值为 "选项二"private void button1_Click(object sender, EventArgs e){dataGridView1.Rows[0].Cells[0].Value = "选项二";}// 处理下拉框选项变化的事件public void comboBox_SelectedIndexChanged(object sender, EventArgs e){ComboBox comboBox = (ComboBox)sender;// 弹出消息框,显示选中的项MessageBox.Show(string.Format("选中了:{0}", comboBox.Text));// 注销事件,避免多次触发comboBox.SelectedIndexChanged -= new EventHandler(comboBox_SelectedIndexChanged);}// 在用户编辑单元格时触发private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e){// 检查当前编辑的控件是否是 ComboBoxif (e.Control is ComboBox comboBox){// 为下拉框控件注册事件处理器,当选项改变时触发comboBox.SelectedIndexChanged += new EventHandler(comboBox_SelectedIndexChanged);}}}
}
3. 代码解析
-
创建
DataGridViewComboBoxColumn列
在Form1_Load方法中,我们创建了一个DataGridViewComboBoxColumn类型的列,添加了 "选项一" 和 "选项二" 两个选项。并通过dataGridView1.Columns.Insert(0, colShow)将该列插入到DataGridView的第一列。 -
设置编辑模式
我们设置dataGridView1.EditMode = DataGridViewEditMode.EditOnEnter,这样可以在单击单元格时直接弹出下拉框,而不需要双击。 -
按钮点击事件
button1_Click方法通过代码设置DataGridView中第一行第一列的值为 "选项二"。这使得在按钮点击后,下拉框会选中该项。 -
处理下拉框选项变化事件
在comboBox_SelectedIndexChanged方法中,我们处理了下拉框项变化时的事件。每当选中不同的项时,弹出一个消息框显示选中的项。为了避免事件被多次触发,我们在事件处理结束后注销了该事件。 -
为下拉框控件注册事件
在dataGridView1_EditingControlShowing事件中,我们检查当前编辑控件是否为ComboBox类型,如果是,则注册SelectedIndexChanged事件处理器,这样可以确保每次进入下拉框时都会触发选项变化事件。
4. 总结
通过使用 DataGridViewComboBoxColumn,我们可以轻松地在 DataGridView 中实现下拉列功能。而且通过 EditingControlShowing 事件,我们可以为下拉框添加自定义的事件处理,使得我们可以响应用户的选择并执行相关操作。
源码地址:https://download.csdn.net/download/weixin_44643352/90085936
相关文章:
实现 DataGridView 下拉列表功能(C# WinForms)
本文介绍如何在 WinForms 中使用 DataGridViewComboBoxColumn 实现下拉列表功能,并通过事件响应来处理用户的选择。以下是实现步骤和示例代码。 1. 效果展示 该程序的主要功能是展示如何在 DataGridView 中插入下拉列表,并在选择某一项时触发事件。 2.…...
使用Java创建RabbitMQ消息生产者的详细指南
目录 在现代分布式系统中,消息队列是实现异步通信的重要工具。RabbitMQ作为一种流行的开源消息代理,支持多种消息协议,广泛应用于微服务架构和事件驱动的应用程序中。本文将深入探讨如何使用Java创建RabbitMQ的消息生产者,发送消息…...
【LC】160. 相交链表
题目描述: 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链式结构中不存在环。 注意&…...
Spark架构及运行流程
Spark架构图 Driver: 解析用户的应用程序代码,转化为作业(job)。创建SparkContext上下文对象,其负责与资源管理器(ClusterManager)通信,进行资源的申请、任务的分配和监控等。跟踪Executor的执行情况。可通过UI界面查询运行情况。…...
Linux安装Python2.7.5(centos自带同款)
卸载已安装的python,防止版本兼容问题 rpm -qa|grep python|xargs rpm -ev --allmatches --nodeps 删除残余文件 whereis python |xargs rm -frv 安装前提是已安装gcc和g gcc --version g --version 下载安装python2.7.5 https://www.python.org/downloads/release/pyt…...
上传ssh公钥到目标服务器
创建密钥 ssh-keygen -t rsa -b 4096 -C "xxxx.xx"上传 sudo ssh-copy-id -i /Users/xx/.ssh/id_rsa.pub root127.0.0.1...
【LLMs】用LM Studio本地部署离线大语言模型
文章目录 一、下载LM Studio二、下载大语言模型1. 查看模型介绍2. 点击模型文件进行下载2.1 完整下载2.2 部分下载 三、加载模型1. 打开LM Studio图形化界面,点击**My Models**2. 然后,点击“...”,选择“change”,选择刚下载好的…...
SpringBoot下类加入容器的几种方式
SpringBoot下类加入容器的几种方式 在 Spring Boot 中,类加入容器的方式不仅多样,而且每种方式都有其特定的使用场景。以下是几种常见的将类加入 Spring 容器的方法及其适用场景: 1. 使用 Component 及其派生注解 使用场景:当开…...
【Mysql】忘记Root密码后如何不影响数据进行重置密码
方法一:通用方法--启动时跳过权限表 1> 停止数据库 以管理员方式打开cmd!! C:\Users\Administrator>net stop mysql MySQL 服务正在停止.. MySQL 服务已成功停止。 2> 启动时跳过权限表 mysqld --console --skip-grant-tables -…...
宝塔内设置redis后,项目以及RedisDesktopManager客户端连接不上!
项目展现问题: Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to xxx.宝塔外链.ip.xxxx:6379 redis客户端连接失败: 1、宝塔中确认redis端口已放行 2、修改redis的配置 bind&#x…...
一文了解模式识别顶会ICPR 2024的研究热点与最新趋势
简介 对模式识别研究领域前沿方向的跟踪是提高科研能力和制定科研战略的关键。本文通过图文并茂的方式介绍了ICPR 2024的研究热点与最新趋势,帮助读者了解和跟踪模式识别的前沿研究方向。本推文的作者是黄星宇,审校为邱雪和许东舟。 一、会议介绍 ICPR…...
【深度学习】深刻理解BERT
BERT(Bidirectional Encoder Representations from Transformers)是由Google于2018年提出的一种预训练的语言表示模型,它基于Transformer架构并能够处理自然语言处理(NLP)中的多种任务。BERT的核心创新是其使用了双向编…...
一种基于通义千问prompt辅助+Qwen2.5-coder-32b+Bolt.new+v0+Cursor的无代码对话网站构建方法
前言 今年似乎大模型之间的“内卷”已经有些偃旗息鼓了,各大技术公司逐渐从单纯追求模型参数量的竞赛中抽身,转向更加注重模型的实际应用效果与效率,开始内卷起了LLM“载具” 不知道这个词是不是我第一个发明的哈,总之我更喜欢…...
Java版-图论-最小生成树-Kruskal算法
实现描述 为了造出一棵最小生成树,我们从最小边权的边开始,按边权从小到大依次加入,如果某次加边产生了环,就扔掉这条边,直到加入了 n-1 条边,即形成了一棵树。 实现代码 首选我们对所有的边,…...
计算机网络知识总结
1.网络协议是什么? 在计算机网络要做到有条不紊地交换数据,就必须遵守一些约定好的规则,比如交换数据地格式,是否需要发送一个应答信息。这些规则被称为网络协议。 分层结构 应用层:为计算机用户提供服务表示层&…...
普通算法——欧拉筛
欧拉筛 思路: 对欧拉筛的实现,主要是依靠一个数组模拟的栈来实现,核心思路为用栈储存已经发现的素数 在之后的遍历中,即可以素数数组中的数为因数来筛出此素数的倍数 遍历是以当前的 i i i 值为基数,来乘当前素数数…...
【知识科普】DNS(域名解析服务)深入解读
文章目录 概述一、基本概念二、域名解析的原理三、域名解析的类型四、域名解析的常见问题及解决方法五、域名解析的重要性 部署一、准备环境二、安装DNS软件三、配置DNS服务器四、测试DNS解析五、维护和管理DNS服务器 配置文件一、BIND DNS服务器配置文件格式二、Windows系统DN…...
数据结构第一弹-数据结构在不同领域的应用
大家好,今天和大家一起总结一下数据结构在不同领域和场景的应用~ 不同的数据结构适用于解决不同类型的问题,从简单的数组到复杂的图结构,每种数据结构都有其独特的应用场景。 1. 数组与链表 1.1 概念 数组:一种线性数据结构&a…...
如何创建基于udp的客户端和服务端
1.先创建好udpServer.hpp、udpServer.cc、udpClient.hpp、udpClient.cc的框架。 #pragma once #include <string> #include <iostream> #include <sys/types.h> #include <sys/socket.h> #include <unistd.h> #include <cerrno> #include…...
ThinkPHP框架审计--基础
基础入门 搭建好thinkphp 查看版本方法,全局搜version 根据开发手册可以大致了解该框架的路由 例如访问url http://127.0.0.1:8094/index.php/index/index/index 对应代码位置 例如在代码下面添加新方法 那么访问这个方法的url就是 http://127.0.0.1:8094/index.…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
