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

C# DataGridView中DataGridViewComboBoxCell列,下拉框事件的处理【完美解决】

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事件

转载于:https://www.cnblogs.com/LuoEast/p/7827574.html

相关文章:

  • C# 中的枚举类型 enum (属于值类型)
  • jQuery选择器之表单对象属性过滤选择器Demo
  • Cloudera Mountable HDFS (hadoop-fuse-dfs).
  • linux reiserfs文件系统损坏后的数据恢复过程记录
  • 把一个用户的相关权限赋予另外一个用户
  • gets函数的不安性详解
  • Silverlight知识链接整理(11月-12月)
  • ORACLE 分区与索引
  • C# 视频监控系列(2):客户端——封装API (1)
  • Silverlight书籍推荐阅读排行榜【续】
  • 文本编辑命令
  • VI批量替换
  • Heron and His Triangle 2017 沈阳区域赛
  • Oracle在线 redo log文件丢失后的恢复
  • python time 与datetime之间的区别与联系
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • (三)从jvm层面了解线程的启动和停止
  • Apache Zeppelin在Apache Trafodion上的可视化
  • Github访问慢解决办法
  • JAVA SE 6 GC调优笔记
  • JavaScript设计模式系列一:工厂模式
  • Java比较器对数组,集合排序
  • java中具有继承关系的类及其对象初始化顺序
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • leetcode-27. Remove Element
  • LeetCode29.两数相除 JavaScript
  • Linux gpio口使用方法
  • Python 基础起步 (十) 什么叫函数?
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • Spring声明式事务管理之一:五大属性分析
  • SQLServer之创建数据库快照
  • 不上全站https的网站你们就等着被恶心死吧
  • 多线程 start 和 run 方法到底有什么区别?
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 前端设计模式
  • 驱动程序原理
  • 如何在GitHub上创建个人博客
  • 十年未变!安全,谁之责?(下)
  • 什么软件可以剪辑音乐?
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 译自由幺半群
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • 通过调用文摘列表API获取文摘
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • "无招胜有招"nbsp;史上最全的互…
  • #{}和${}的区别是什么 -- java面试
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (简单) HDU 2612 Find a way,BFS。
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (五)关系数据库标准语言SQL
  • (转)winform之ListView