实现 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)
        {
            // 检查当前编辑的控件是否是 ComboBox
            if (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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

传输层5——TCP可靠传输的实现(重点!!)

TCP协议如何实现可靠传输?确保接收方收到数据? 需要依靠几个结构: 以字节为单位的滑动窗口 这其中包括发送方的发送窗口和接收方的接收窗口 下面的描述,我们指定A为发送端口,B为接收端口 TCP的可靠传输就是靠着滑动窗口…

java Random随机数

Randoms是什么 在Java中,Random类是用于生成伪随机数的工具。它位于java.util包中。以下是一些使用Random类生成不同类型的随机数的方法: 1 创建 Random 类的实例 2 生成一个随机的int值(范围从Integer.MIN_VALUE到Integer.MAX_VALUE&#…

React的复制粘贴组件——React Copy to Clipboard

React Copy to Clipboard是一个用于在React应用程序中复制文本到剪贴板的库。它提供了一个简单的方式来实现复制到剪贴板的功能,支持多种浏览器和设备。 安装 你可以使用npm或yarn来安装React Copy to Clipboard: npm install react-copy-to-clipboa…

【Android Studio】学习——网络连接

实验:Android网络连接 文章目录 实验:Android网络连接[toc]实验目标和实验内容:1、掌握Android联网的基本概念;2、能够使用URL connection实现网络连接;3、掌握第三方库的基本概念4、需实现的具体功能 实验结果功能说明…

泷羽Sec-星河飞雪-bp验证码爆破

免责声明 学习视频来自 B 站up主泷羽sec,如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识,以下代码、网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。 泷羽sec官网:http…

基础算法——搜索与图论

搜索与图论 图的存储方式2、最短路问题2.1、Dijkstra算法(朴素版)2.2、Dijkstra算法(堆优化版)2.3、Bellman-Ford算法2.4、SPFA求最短路2.5、SPFA判负环2.6、Floyd算法 图的存储方式 2、最短路问题 最短路问题可以分为单源最短路…

C#构造函数 析构函数 静态成员(类) 密封类 字段以及属性

每当创建类或结构的实例时,将会调用其构造函数。 类或结构可能具有采用不同参数的多个构造函数。 使用构造函数,程序员能够设置默认值、限制实例化,并编写灵活易读的代码 如果静态构造函数尚未运行,静态构造函数会在任何实例构造…

公立医院高质量发展——急慢性气道疾病药学服务科普宣传培训成功开展

2023年,为积极响应国家关于推动公立医院高质量发展的号召,中国健康促进基金会开展了公立医院高质量发展——急慢性气道疾病药学服务科普宣传培训。该项目旨在通过科普宣传和培训,提升咳喘药学规范化服务水平,促进临床专业知识与咳…

product/admin/list?page=0size=10field=jancodevalue=4562249292272

文章目录 1、ProductController2、AdminCommonService3、ProductApiService4、ProductCommonService5、ProductSqlService https://api.crossbiog.com/product/admin/list?page0&size10&fieldjancode&value45622492922721、ProductController GetMapping("ad…

linux介绍------VMWare的卸载,下载,安装------及基础命令使用

文章目录 Linux第一天1、为什么要学习linux?2、怎么去学linux?(什么是大数据)3、VMWare的卸载,下载,安装4、检查网卡5、创建新的虚拟机(安装步骤:看视频)6、几个名字的理…

游戏引擎学习第38天

仓库: https://gitee.com/mrxiao_com/2d_game 回顾上次的内容。 我们之前讨论了将精灵放在屏幕上,但颜色错误的问题。问题最终查明是因为使用了一个调整工具,导致文件的字节顺序发生了变化。重新运行“image magic”工具对一些大图像进行重新处理后&am…

leetcode 二进制数转字符串

1.题目要求: 2.题目代码: class Solution { public:string printBin(double num) {string result;double compare_value 1.0;//先给把0和.赋值给result;result.push_back(0);result.push_back(.);while(result.size() < 33){//利用十进制转换成二进制的方法//1.先给num …

JS进阶DAY3|页面加载事件和页面滚动事件

目录 一、页面加载事件 1.1 DOMContentLoaded 事件 1.1.1 触发时机 1.1.2 用途 1.1.3 代码示例document.addEventListener(DOMContentLoaded, (event) > { 1.2 load 事件 1.2.1 触发时机 1.2.2 用途 1.2.3 代码示例 二、页面滚动事件 1.1 scroll事件 1.1.1 触…

overleaf 写论文 语法笔记

1.找参考的期刊/论文模板 注册账户后并登录后进入这个界面&#xff0c;创建的所有历史项目会在这个界面显示&#xff0c;后期可以继续修改。 创建新项目&#xff1a;点击绿色按钮“创建新项目”后&#xff0c;可以新建空白项目&#xff0c;可以选择模板直接往模板里添加内容,…

OpenCV-平滑图像

二维卷积(图像滤波) 与一维信号一样&#xff0c;图像也可以通过各种低通滤波器&#xff08;LPF&#xff09;、高通滤波器&#xff08;HPF&#xff09;等进行过滤。LPF 有助于消除噪音、模糊图像等。HPF 滤波器有助于在图像中找到边缘。 opencv 提供了函数 **cv.filter2D()**&…

Pandas | skill | 将groupby分组后的数据使用堆叠图像展示

groupby堆叠图 计算商品名称和销售数量计算商品名称和销售总额在每个颜色段上标注商品名称和平均销售金额 计算商品名称和销售数量 # 筛选出四个类别下的商品数据 categories_of_interest [Clothing, Accessories, Footwear, Outerwear] # data[Category]列中的元素是否在cat…

selenium常见接口函数使用

博客主页&#xff1a;花果山~程序猿-CSDN博客 文章分栏&#xff1a;测试_花果山~程序猿的博客-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我们一起努力&#xff0c;一起成长&#xff01; 目录 1. 查找 查找方式 css_s…

vue-router查漏补缺

一、动态路由匹配 1.带参数的动态路由匹配 import User from ./User.vue// 这些都会传递给 createRouter const routes [// 动态字段以冒号开始{ path: /users/:efg, component: User }, ]这种方式的路由会匹配到/users/abc或者/users/123,路径参数用冒号:表示&#xff0c;并…

深度和法线纹理

屏幕后期处理效果的基本原理就是当游戏画面渲染完毕后通过获取到该画面的信息进行额外的效果处理 之前的边缘检测、高斯模糊、Bloom、运动模糊等效果都是基于获取当前屏幕图像中的像素信息进行后期处理的 如果仅仅根据像素信息来进行一些效果处理&#xff0c;存在以下问题&…

Vue3小兔鲜电商项目

创建项目 npm install 装包 创建文件夹 git工具管理项目 基于create-vue创建出来的项目默认没有初始化git仓库&#xff0c;需要我们手动初始化 执行命令并完成首次提交&#xff1a; git init git add . git commit -m "init"