当前位置: 首页 > article >正文

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


http://www.kler.cn/a/429960.html

相关文章:

  • Vue.config.productionTip = false 不起作用的问题及解决
  • OpenCV相机标定与3D重建(53)解决 Perspective-3-Point (P3P) 问题函数solveP3P()的使用
  • 详细分析 Git 分支重命名与同步操作
  • vue3+ts+element-plus 对话框el-dialog设置圆角
  • CTFshow—文件包含
  • 【AI进化论】 如何让AI帮我们写一个项目系列:将Mysql生成md文档
  • 【C#】Task.Delay与Thread.Sleep
  • WPF 本地生成验证码
  • mysql 架构详解
  • 【元素操作】鼠标 -ActionChains
  • SWIRL:有望成为2025年顶级AI搜索引擎
  • 《蓝桥杯比赛规划》
  • 第七节(2)、T型加减速优化处理【51单片机-TB6600驱动器-步进电机教程】
  • NVR管理平台EasyNVR:EasyNTS上云网关无法启动且报错404如何解决?
  • 区块链钱包开发:全面功能设计方案解析
  • linux之less
  • docker-常用应用部署dockerfile模板
  • 数据库优化、sql优化
  • 奇异值分解推导——把任意n维度矢量,从vi基分量对应映射到ui基分量。所以分解后,V转置是提取矢量中属于V的列的分量。
  • 磁盘阵列服务器和普通服务器的区别
  • 在微信小程序中引入字体样式
  • 杂谈随笔-关于unity开发游戏
  • 如何让Google快速收录你的页面?
  • (0基础保姆教程)-JavaEE开课啦!--13课程(Interception拦截器)-完结
  • 如何使用 Docker Compose 安装 Memos 自托管笔记应用
  • 非MFC工程实现消息映射