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. SPOJ SERGRID - Grid BFS

    SERGRID - Grid no tags  You are on an nxm grid where each square on the grid has a digit on it. From ...

  2. 关于使用scrapy框架编写爬虫以及Ajax动态加载问题、反爬问题解决方案

    Python爬虫总结 总的来说,Python爬虫所做的事情分为两个部分,1:将网页的内容全部抓取下来,2:对抓取到的内容和进行解析,得到我们需要的信息. 目前公认比较好用的爬虫框架为Scrapy,而且 ...

  3. 简单用数组模拟顺序栈(c++版)适合新手

    **栈是一种操作受限制的线性表,太多官方的话我也不说了,我们都知道栈元素是先进后出的,它有两种存储结构,分别是顺序存储结构和链式存储结构. **今天我先记一下顺序存储结构,后面我会加上链式存储结构的. ...

  4. C++ list forward_list

    list,forward_list list:双向链表 forward_list:单向链表 在任何位置添加元素,删除元素都很快,但随机访问元素则很慢 声明和初始化 list<T> l; l ...

  5. Python爬虫(十)_正则表达式

    本篇将介绍python正则表达式,更多内容请参考:[python正则表达式] 什么是正则表达式 正则表达式,又称规则表达式,通常被用来检索.替换那些符合某个模式(规则)的文本. 正则表达式是对字符串操 ...

  6. 在IIS7上导出全部应用程序池的方法 批量域名绑定

    在IIS7+上导出全部应用程序池的方法: %windir%/system32/inetsrv/appcmd list apppool /config /xml > c:/apppools.xml ...

  7. It appears that the Web Project,“”,has no Web Root directory setup

    1 错误描写叙述 2 错误原因 因为项目是用eclipse新建的,web的根文件夹文件夹是WebContent.而MyEclipse新建的项目的Web根文件夹是WebRoot.直接将eclipse项目 ...

  8. Ration Rose2003安装及破解

    曾经学习UML的时候,用的是EA. 近期在看Head First想着画绘图装一下Ration Rose吧.于是就着手開始装.本来网上关于Ration Rose的安装及破解教程非常多,可是我在安装的过程 ...

  9. OS X第三方类库管理工具cocoapods入门

    一.简介 什么是cocoapods?--是OS X和iOS下一个第三方类库管理工具.通过cocoapods,可以为项目添加"Pods"依赖库,并且管理其版本. cocoapods好 ...

  10. ABP入门系列(9)——权限管理

    ABP入门系列目录--学习Abp框架之实操演练 源码路径:Github-LearningMpaAbp 完成了简单的增删改查和分页功能,是不是觉得少了点什么? 是的,少了权限管理.既然涉及到了权限,那我 ...