實現 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.pswp.cn/web/62299.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/62299.shtml
英文地址,請注明出處:http://en.pswp.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 日

作品集講述部分 分析反思 作品集講述部分,視覺講述部分需要更換,需要換成其他視覺相關的修改 具體話術 這是一個信息展示優化方案,用戶為財務,信息區分度不足,理解成本較高,因此選擇需要降低理解成本。…