http://blog.csdn.net/a312100321/article/details/25195311

问题:DataGridView绑定数据源之后,有一列需要用下拉框DataGridViewComboBoxCell显示,但是在处理DataGridViewComboBoxCell的下拉事件有些麻烦,它不像ComBox有SelectedIndexChanged,困扰我很久,结合网上的一些方法,再加上自己的一些改动,终于完全可以解决这个问题了。下面是我的代码,有详细注释。

一、

/// <summary>

        /// 首先给这个DataGridView加上EditingControlShowing事件

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

public void dgv_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)

        {

            DataGridView dgv = sender as DataGridView;

//判断相应的列

            if (dgv.CurrentCell.GetType().Name == "DataGridViewComboBoxCell" && dgv.CurrentCell.RowIndex != -1)

            {

//给这个DataGridViewComboBoxCell加上下拉事件

                (e.Control as ComboBox).SelectedIndexChanged += new EventHandler(ComboBox_SelectedIndexChanged);

               

            }

        }

二、

/// <summary>

        /// 组合框事件处理

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        public void ComboBox_SelectedIndexChanged(object sender, EventArgs e)

        {

ComboBox combox=sender as ComboBox;

//这里比较重要

            combox.Leave+=new EventHandler(combox_Leave);

             try

             {

                 //在这里就可以做值是否改变判断

                 if (combox.SelectedItem != null)

                 {

                     

                 }

                 Thread.Sleep(100);

             }

             catch (Exception ex)

             {

                 MessageBox.Show(ex.Message);

             }

        }

三、(这一步比较重要,如果不加,会导致selectedchanged事件一直触发

/// <summary>

        /// 离开combox时,把事件删除

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        public void combox_Leave(object sender, EventArgs e)

        {

            ComboBox combox = sender as ComboBox;

            //做完处理,须撤销动态事件

            combox.SelectedIndexChanged -= new EventHandler(ComboBox_SelectedIndexChanged);

        }

总结:网上的方法一般都是在第二步的时候把

//做完处理,须撤销动态事件

            combox.SelectedIndexChanged -= new EventHandler(ComboBox_SelectedIndexChanged);

这个事件撤销了,但是我在用的时候,发现,如果在第二步就撤销这个事件,在Combox没有失去焦点的情况下,选择另一个选项,不会触发Combox的selectedchanged事件

C# DataGridView中DataGridViewComboBoxCell列,下拉框事件的处理【完美解决】的更多相关文章

  1. HTML中的select下拉框内容显示不全的解决办法

    HTML中的select下拉框内容显示不全的解决办法 今天,我遇到这样一个问题:查询栏中的下拉框中的内容过长,导致部分被覆盖了. 查询了一些资料,有的说用函数控制,有的说用事件控制,有的看不懂,有的实 ...

  2. struts2 jsp表单提交后保留表单中输入框中的值 下拉框select与input

    原文地址:struts2 jsp表单提交后保留表单中输入框中的值 下拉框select与input jsp页面 1     function dosearch() {2         if ($(&q ...

  3. python webdriver中对不同下拉框通过文本值的选择

    在自动化中python对下拉框的处理网上相对实例比较少,其它前辈写的教程中对下拉也仅仅是相对与教程来说的,比如下面: m=driver.find_element_by_id("Shippin ...

  4. 9、JcomboBox下拉框事件监听

    9.JcomboBox下拉框事件监听 JComboBox()的事件监听类ItemListener.其范例代码如下: import java.awt.*; import java.awt.event.* ...

  5. winform dataGridView DataGridViewComboBoxColumn 下拉框事件代码

    有一个dataGridView ,有一列是DataGridViewComboBoxColumn .我用动态绑定,在绑定数据的时候.我们也给这一列绑定数据 在dataGridView的RowsAdded ...

  6. winform dataGridView DataGridViewComboBoxColumn 下拉框事件

    有一个dataGridView ,有一列是DataGridViewComboBoxColumn .用动态绑定,在绑定数据的时候.我们也给这一列绑定数据 在dataGridView的RowsAdded事 ...

  7. POI设置excel添加列下拉框

    POI在生成excel模板时需要为列添加下拉框,我写了两个方法. @ 方法一:适用任何情况,不受下拉框值数量限制.但是需要通过引用其它列值. 思路大概如下: 1.创建一个隐藏的sheet页,用于存放下 ...

  8. ASP.NET MVC 中枚举生成下拉框

    最近公司在开发财务系统,在工作中遇到不少的地方需要下拉框. 但是枚举框中数据的内容又来自枚举. 枚举代码如下: public class EnumDemo { public enum Value { ...

  9. Vue ElementUI表格table中使用select下拉框组件时获取改变之前的值

    目前项目中有一个场景,就是表格中显示下拉框,并且下拉框的值可以更改,更改后提交后台更新.因为这个操作比较重要,所以切换时会有一个提示框,提示用户是否修改,是则走提交逻辑,否则直接返回,什么也不做. 之 ...

随机推荐

  1. HDU 3549 Flow Problem 网络流(最大流) FF EK

    Flow Problem Time Limit: 5000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Tot ...

  2. 微信原始demo

    有可能下载最新的demo下载不到这个原版的精简demo了. 这里为大家提供一下.以下代码为原始未改动代码   01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 ...

  3. Android开发之漫漫长途 ⅥI——Android消息机制(Looper Handler MessageQueue Message)

    该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...

  4. indexOf 和 lastIndexOf的区别

    indexOf 和  lastIndexOf 是什么? indexOf 和 lastIndexOf 都是索引文件 indexOf 是查某个指定的字符串在字符串首次出现的位置(索引值) (也就是从前往后 ...

  5. 怎么配置Jupyter Notebook默认启动目录?

    前言 系统环境:win10 x64:跟环境也没啥关系,在LInux下也一样... 前段时间重换了系统后,发现Jupyter Notebook的默认启动目录不太对呀,所以,就翻到了以前的笔记,还是记在这 ...

  6. Docker: 限制容器可用的 CPU

    默认情况下容器可以使用的主机 CPU 资源是不受限制的.和内存资源的使用一样,如果不对容器可以使用的 CPU 资源进行限制,一旦发生容器内程序异常使用 CPU 的情况,很可能把整个主机的 CPU 资源 ...

  7. (win10 64位系统中)Visual Studio 2015+OpenCV 3.3.0环境搭建,100%成功

    (win10 64位系统中)Visual Studio 2015+OpenCV 3.3.0环境搭建,100%成功 1.下载opencv 官网http://opencv.org/下载windows版Op ...

  8. Linux安装Nginx以及简单理解

    1.Nginx简单介绍 ①.Nginx:一个高性能的HTTP和反向代理服务器,高并发处理很不错. ②.反向代理:在计算机世界里,由于单个服务器的处理客户端(用户)请求能力有一个极限,当用户的接入请求蜂 ...

  9. 智能合约语言 Solidity 教程系列4 - 数据存储位置分析

    写在前面 Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊.智能合约有所了解, 如果你还不了解,建议你先看以太坊是什么 这部分的内容官方英文文档讲的不是很透,因此我在参考Soli ...

  10. TRIZ系列-创新原理-26-复制原理

    复制原理的详细表述例如以下:1)用简化的,廉价的复制品来替代易碎的或不方便操作的物体;    这样能够减少成本,提高可操作性.2)假设已经使用了可见光的复制品,那么使用红外光或者紫外光的复制品:    ...