winform dataGridView DataGridViewComboBoxColumn 下拉框事件代码
2016-05-25 10:45
309 查看
有一个dataGridView
,有一列是DataGridViewComboBoxColumn 。我用动态绑定,在绑定数据的时候。我们也给这一列绑定数据
在dataGridView的RowsAdded事件中写代码
这里的DataGridViewComboBoxColumn 默认显示的下拉框,选择时需要点击三次,第一次选中单元格,第二次启用编辑,第三次打开下拉框。如果需要一次点击打开下拉框,可以启用DataGridView的CellEnter()事件,代码如下:
接下来我们给DataGridViewComboBoxColumn添加选择事件。当我们选择时。触发事件。需要在EditingControlShowing事件里面写。如下:
正如上面说的。如果你不取消SelectedIndexChanged事件。当你触发一个ComboBox。后。你在点击第二次。会触发之前的事件。在触发当前的事件
以至于以此类推。触发事件会很多。
,有一列是DataGridViewComboBoxColumn 。我用动态绑定,在绑定数据的时候。我们也给这一列绑定数据
在dataGridView的RowsAdded事件中写代码
/// <summary> /// 添加新行 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void dgvGoodsType_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e) { DataTable dt = DAL.SQLHelper.Adapter("select type from OrderType"); //这里的 "T_分类" 是DataGridViewComboBoxColumn列名。 DataGridViewComboBoxColumn cbb = dgvGoodsType.Columns["T_分类"] as DataGridViewComboBoxColumn; if (cbb != null) { cbb.DefaultCellStyle.NullValue = lbType.Text;//显示默认值 根据自己的需求改 cbb.DataPropertyName = "type"; cbb.ValueMember = "type"; cbb.DisplayMember = "type"; cbb.DataSource = dt; } }
这里的DataGridViewComboBoxColumn 默认显示的下拉框,选择时需要点击三次,第一次选中单元格,第二次启用编辑,第三次打开下拉框。如果需要一次点击打开下拉框,可以启用DataGridView的CellEnter()事件,代码如下:
private void dgvGoodsType_CellEnter(object sender, DataGridViewCellEventArgs e) { //实现单击一次显示下拉列表框 if (dgvGoodsType.Columns[e.ColumnIndex] is DataGridViewComboBoxColumn && e.RowIndex != -1) { SendKeys.Send("{F4}"); } }
接下来我们给DataGridViewComboBoxColumn添加选择事件。当我们选择时。触发事件。需要在EditingControlShowing事件里面写。如下:
ComboBox cbo = new ComboBox(); private void dgvGoodsType_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { //判断相应的列 //dgvGoodsType.Tag = dgvGoodsType.CurrentCell.RowIndex; //保存索引值 if (dgvGoodsType.CurrentCell.OwningColumn.Name == "T_分类" && dgvGoodsType.CurrentCell.RowIndex != -1) { cbo = e.Control as ComboBox; //保存当前的事件源。为了触发事件后。在取消 cbo.SelectedIndexChanged += new EventHandler(cbo_SelectedIndexChanged); } } void cbo_SelectedIndexChanged(object sender, EventArgs e) { ComboBox combox = sender as ComboBox; //这里就可以写。触发后是逻辑代码 MessageBox.Show(combox.Text); //combox.Text和cbo.Text获取的值是相同的 //做完处理,须撤销动态事件。如果不撤销会遇到什么问题。你可以自己试试 cbo.SelectedIndexChanged -= new EventHandler(ccgl_SelectedIndexChanged); //或者 combox.SelectedIndexChanged -= new EventHandler(cbo_SelectedIndexChanged); }
正如上面说的。如果你不取消SelectedIndexChanged事件。当你触发一个ComboBox。后。你在点击第二次。会触发之前的事件。在触发当前的事件
以至于以此类推。触发事件会很多。
相关文章推荐
- Delphi XE3 代码自动提示bug的解决
- JAVA环境配置
- delphi 在DLL中添加窗体
- 编程珠玑---内循环优化
- 框架 day37 Spring3,AOP,代理模式(动态/CGLIB/工厂bean),传统AOP,AspectJ框架(基于xml/注解),切入点表达式,jdbcTemplate
- Java之实体类
- C# 读写文件
- Rxjava中的zip操作
- Python的Twisted框架上手前所必须了解的异步编程思想
- C++容器内存分配特点简介
- 使用 Spring、Elasticsearch 及 Logstash 构建企业级数据搜索和分析平台
- java hashCode() 与 equals()
- 关于C++类的静态数据为什么一定要初始化
- strut2+spring事务控制
- 改进编程习惯
- java对象持久化
- 老中医根治python编码问题2
- 士兵突击python/Cython
- C++程序设计语言练习5.8 编译器对指针的优化
- C#反射实例应用--------获取程序集信息和通过类名创建类实例