实现 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/62299.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker Compose实战一( 轻松部署 Nginx)

通过过前面的文章(Docker Compose基础语法)你已经掌握基本语法和常用指令认识到Docker Compose作为一款强大工具的重要性,它极大地简化了多容器Docker应用程序的部署与管理流程。本文将详细介绍如何使用 Docker Compose 部署 Nginx&#xff0…

【免费】如何考取HarmonyOS应用开发者基础认证和高级认证(详细教程)

HarmonyOS应用开发者认证考试PC网址 基础:华为开发者学堂 高级:华为开发者学堂 注:免费认证,其中基础认证有免费的课程,浏览器用Edge。 (新题库有点懒,不更新了,点赞收藏后找我要新题库 2024…

解决ThreadLocal在项目中的线程数据共享问题

目录 ThreadLocal 简介 问题描述 为什么会有这个问题 解决方案 1. 使用请求作用域存储 2. 使用 HTTP Session 存储 3. 使用 Spring Security 4. 确保 ThreadLocal 的正确使用 5.通常解决方法 结论 在多线程环境中,ThreadLocal 是一种非常有用的工具&#…

瑞芯微开发板 烧写固件问题

自用rk3568-firefly-itx-3568q核心板fpga自研底板,因底板所需外设、功能与原厂有较大差异,故裁剪相应sdk,编译新的内核进行烧写。然而在更改设备树过程中kernel/drivers/media/i2c/fpga.c中的像素格式MEDIA_BUS_FMT_YUYV8_2X8误改成MEDIA_BUS…

photoblog解题过程

本题要求:通过sql注入,找到数据库中的账号密码,并成功登录。登录后利用文件上传,将一句话木马上传到数据库中,然后并对网站进行控制。 解题过程 1、通过在靶机中输入ifconfig,查到ip为192.168.80.153&…

QT获取tableview选中的行和列的值

查询数据库数据放入tableview(tableView_database)后 QSqlQueryModel* sql_model new QSqlQueryModel(this);sql_model->setQuery("select * from dxxxb_move_lot_tab");sql_model->setHeaderData(0, Qt::Horizontal, tr("id&quo…

「Mac玩转仓颉内测版46」小学奥数篇9 - 基础概率计算

本篇将通过 Python 和 Cangjie 双语实现基础概率的计算,帮助学生学习如何解决简单的概率问题,并培养逻辑推理和编程思维。 关键词 小学奥数Python Cangjie概率计算 一、题目描述 假设有一个袋子中有 5 个红球和 3 个蓝球,每次从袋子中随机…

Face2QR:可根据人脸图像生成二维码,还可以扫描,以后个人名片就这样用了!

今天给大家介绍的是一种专为生成个性化二维码而设计的新方法Face2QR,可以将美观、人脸识别和可扫描性完美地融合在一起。 下图展示为Face2QR 生成的面部图像(第一行)和二维码图像(第二行)。生成的二维码不仅忠实地保留…

电子商务人工智能指南 1/6 - 搜索、广告和发现

介绍 81% 的零售业高管表示, AI 至少在其组织中发挥了中等至完全的作用。然而,78% 的受访零售业高管表示,很难跟上不断发展的 AI 格局。 近年来,电子商务团队加快了适应新客户偏好和创造卓越数字购物体验的需求。采用 AI 不再是一…

Python快速入门二:Python3 基础语法

一、编码 默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串。 当然你也可以为源码文件指定不同的编码: # -*- coding: cp-1252 -*-上述定义允许在源文件中使用 Windows-1252 字符集中的字符编码,对应适…

nextcloud云盘的部署

借鉴链接:https://blog.csdn.net/guigenyi/article/details/126692747 创建自定义 Docker 网络 docker network create nextcloud-network 创建mysql的账号密码都是root 并将其连接到自定义网络 docker run --name mysql-container --network nextcloud-network -e…

图(dfs与bfs)算法1

开辟新专题!不擅长的图它来了来了!(莫名激动 进度:10/100 另:没想到给自己挖了个坑,可以用dfs的基本上也可以用bfs,看来要双线并行了。 补:图算法是我近期得有30%的焦虑来源了&am…

Ruby On Rails 笔记3——表的增删改查

1.Migration Migrations是一种便利的方法,能以重现的方式随时间推移改变数据库schema. 使用Ruby Domain Specific Language (DSL),因此你不用手写SQL,进而使你的schema和changes与数据库独立。 可以把每次migration看作是数据库的一个新“版本”。A schema开始时什么都没有…

一、测试工具LoadRunner Professional脚本编写-录制前设置

设置基于URL的脚本 原因:基于HTML的脚本会导致login接口不能正确录制 设置UTF-8 原因:不勾选此项会导致脚本中文变为乱码

14、鸿蒙学习——管理通知角标

针对未读的通知,系统提供了角标设置接口,将未读通知个数显示在桌面图标的右上角角标上。 通知增加时,角标上显示的未读通知个数需要增加。 通知被查看后,角标上显示的未读通知个数需要减少,没有未读通知时&#xff0…

Thonny IDE + MicroPython + ESP32 + GY-302 测量环境中的光照强度

GY-302是一款基于BH1750FVI光照强度传感器芯片的模块。该模块能够直接测量出环境中的光照强度,并将光照强度转换为数字信号输出。其具体参数如下表所示。 参数名称 参数特性 测量范围 0-65535 LX 测量精度 在环境光下误差小于20%,能够自动忽略50/60…

AJAX和XHR、fetch、axios的关系

AJAX中有两套原生的API,一个是XHR(XMLHttpRequest),一个是Fetch API axios是第三方库,在浏览器环境中使用的是XHR umi-request也是第三方库,在浏览器环境中使用的是Fetch 在 AJAX(Asynchronous JavaScript and XML&am…

openlayers地图缓存添加

//通过安装包localforage(npm install localforage)或https://cdnjs.cloudflare.com/ajax/libs/localforage/1.10.0/localforage.min.js tileCacheStore.js import localforage from localforage var tileCacheStorenull;// 从缓存中获取该瓦片 functio…

云轴科技ZStack出席中国电信国际EMCP平台香港发布会,持续推动海外合作

近日,以“云聚未来 翼起新篇”为主题的中国电信国际多云服务一站式平台(E-surfing Managed Cloud Platform,简称EMCP平台)新闻发布会在香港成功举办,标志着中国电信国际在云计算服务领域取得了又一重大进展。云轴科技…

面试复盘 part 02·1202-1207 日

作品集讲述部分 分析反思 作品集讲述部分,视觉讲述部分需要更换,需要换成其他视觉相关的修改 具体话术 这是一个信息展示优化方案,用户为财务,信息区分度不足,理解成本较高,因此选择需要降低理解成本。…