本文转载:http://www.cnblogs.com/Johnny_Z/archive/2012/02/12/2348235.html

Winform中的DataGridView数据绑定控件有时会用到ComboBox列,想要显示ComboBox列的内容需要点击两到三次才可以。这使操作变得很麻烦,降低了易用性,尤其是在程序部署在一些小型设备或者触摸屏设备上时,则更为不便。下面介绍两种方法解决这个问题。

首先,我们创建一个Windows应用程序,在窗体中拖拽一个DataGridView控件,命名为dataGridView。要确保该控件的“启用编辑”选项勾选。下面我们动态创建列,以及添加一行数据。写一个函数IniteDGV,在窗体Shown事件中调用函数。

  1. private void IniteDGV()
  2. {
  3. DataGridViewComboBoxColumn combo = new DataGridViewComboBoxColumn();
  4. combo.HeaderText = "comboBox列";
  5. combo.Name = "combo";
  6. combo.Width = ;
  7. combo.DataSource=(new string[] { "", "", "" });
  8.  
  9. DataGridViewTextBoxColumn textbox = new DataGridViewTextBoxColumn();
  10. textbox.HeaderText = "textbox列";
  11. textbox.Name = "textbox";
  12. textbox.Width = ;
  13.  
  14. dataGridView.Columns.AddRange(combo, textbox);
  15. DataGridViewRow row = new DataGridViewRow();
  16. dataGridView.Rows.Add(row);
  17.  
  18. if (dataGridView.Columns.Contains("combo") )
  19. {
  20. row.Cells["combo"].Value = "";
  21. }
  22.  
  23. }

好了,以上基本工作做完了,下面说其中一个方法。

方法一:

在DataGridView控件的CellClick事件中添加如下代码:

  1. CellClick事件
  2. private void dataGridView_CellClick(object sender, DataGridViewCellEventArgs e)
  3. {
  4. if (e.RowIndex >= && e.ColumnIndex >= )
  5. {
  6. DataGridViewComboBoxColumn combo = dataGridView.Columns[e.ColumnIndex] as DataGridViewComboBoxColumn;
  7. if (combo != null) //如果该列是ComboBox列
  8. {
  9. dataGridView.BeginEdit(false); //结束该列的编辑状态
  10. DataGridViewComboBoxEditingControl comboEdite = dataGridView.EditingControl as DataGridViewComboBoxEditingControl;
  11. if (comboEdite != null)
  12. {
  13. comboEdite.DroppedDown = true; //展现下拉列表
  14. }
  15. }
  16.  
  17. DataGridViewTextBoxColumn textbox = dataGridView.Columns[e.ColumnIndex] as DataGridViewTextBoxColumn;
  18. if (textbox != null) //如果该列是TextBox列
  19. {
  20. dataGridView.BeginEdit(true); //开始编辑状态
  21. }
  22. }
  23. }

方法二:

在DataGridView的CellEnter事件中添加如下代码:

  1. CellEnter事件
  2. private void dataGridView_CellEnter(object sender, DataGridViewCellEventArgs e)
  3. {
  4. DataGridView dgv = sender as DataGridView;
  5.  
  6. if (dgv != null)
  7. {
  8. if (dgv.Columns[e.ColumnIndex].Name == "combo" &&
  9. dgv.Columns[e.ColumnIndex] is DataGridViewComboBoxColumn)
  10. {
  11. SendKeys.Send("{F4}"); //选中ComboBox列时,相当于按了键盘的F4键
  12. }
  13. }
  14. }

DataGridView的DataGridViewComboBoxColumn列点击一次,自动处于编辑状态的更多相关文章

  1. DataGridView的DataGridViewComboBoxColumn列在编辑时自动弹出下拉列表

    在DataGridView的CellEnter的事件中添加如下代码即可: if (e.ColumnIndex == dataGridView1.Columns["仓库名"].Ind ...

  2. Extjs之rowEditing编辑状态时列不对齐

    Extjs在使用rowEditing的时候,会在每一列加上editor属性,表示当处于编辑状态时这一列的值是什么类型的,后突然发现在rowEditing处于编辑状态时每一列的宽度边框了,如果列数非常多 ...

  3. Winform 中DataGridView的checkbox列,当修改checkbox状态时实时获得其状态值

    不知道大家有没有这样的经验,当点击或者取消datagridview的checkbox列时,比较难获得其状态是选中还是未选中,进而不好进行其它操作,下面就列出它的解决办法: 主要用到了DataGridV ...

  4. DataGridView如何实现列标头带数据筛选功能,就象Excel高级筛选功能一样

    '近日有本论坛网友问:DataGridView如何实现列标头带数据筛选功能,就象Excel高级筛选功能一样 '今晚正好闲着没事,加之以前也没用到过这个需求,所以就写了个模拟功能,供各位坛友酌情参考. ...

  5. DataGridView中DataGridViewComboBoxColumn的一些相关应用(一)让其值改变时触发事件-转

    转自  https://maodaili.de/mao.php?u=a%2FMrbEvUE8PnCuc7FrhJi0Rqd3kmOBHPZUbcJ1c2hbJUK0RYWpAf4lhIOddItP%2 ...

  6. C# WinForm DataGridView 给标题列增加序号及格式化某个字段

    DataGridView 给标题列增加序号 private void dataGridView1_DataBindingComplete(object sender, DataGridViewBind ...

  7. DataGridView在Cell编辑状态响应回车键下的KeyPress/KeyDown/KeyUp事件

    我们知道由于DataGridView的单元格DataGridCell处于编辑的时候,当你按Enter键,那么DataGridView是不会激发KewPress/KeyDown/KeyUp这些事件的,因 ...

  8. vue 表格数据编辑,点击取消或者完成按钮后,关闭编辑状态没有及时生效

    点击编辑按钮: 编辑状态下,表格可以编辑.但是点击“确认”或者“取消”按钮,列数据编辑状态已经修改,但是视图没有改变. 页面代码: 获取当前行的index,并直接修改当前行用于判断是否编辑状态的数据为 ...

  9. WebBrowser自动点击链接 广告自动点击 Ads Auto Click

    点击付费广告, 是目前比较流行的一种网络营销模式, 但是,如果你单纯的靠手工一个一个去点, 总觉得不划算  , 能不能实现自动的去点击呢? 答案是肯定的 .NET 里面的 WebBrowser, 可以 ...

随机推荐

  1. POJ 1734.Sightseeing trip (Floyd 最小环)

    Floyd 最小环模板题 code /* floyd最小环,记录路径,时间复杂度O(n^3) 不能处理负环 */ #include <iostream> #include <cstr ...

  2. Devexpress Barmanager设置

    一,在bar的属性中有optionbar,可以做一些设置. 其中比较有用的是:1,去掉最右边的箭头:allowquickcustomization 改为false 2,去掉最左边的竖线:drawdra ...

  3. WordPress批量修改文章内容、URL链接、文章摘要

    通过SQL语句来批量修改wordpress博客内容,文章中所有语句都使用默认的wp_表前缀,如果您的数据表前缀不是wp_则需要在语句中作相应更改. 方法/步骤   批量修改文章内容 如果您想替换之前写 ...

  4. pytesser的使用

    pytesser以及其依赖插件下载地址:链接: http://pan.baidu.com/s/1i3zgpjJ 密码: ueyy 在学习Webdriver的过程中遇到验证码的识别问题,问了度娘知道了p ...

  5. Python - 多元组(tuple)

    声明一个多元组 (4, 5, 6) 这是列表 [4, 5, 6] 与列表不一样在于多元组使用() 来组织元素而list使用方括号[] 而且多元组不能更改,用于当你的数组不想像list一样会被更改时就使 ...

  6. C语言陷阱——类型转换

    以下例子取自<深入理解计算机系统>. 考虑如下的C语言代码: #include<stdio.h> typedef unsigned char* byte_pointer; vo ...

  7. Mvc Controller 单元测试 Mock User.Identity.Name

    被测试的Action 包含 User.Identity.Name 代码,在写测试代码需要Mock ControllerContext对象 代码如下: var mock = new Mock<Co ...

  8. 用汇编语言研究C语言的全局变量、局部变量、参数、返回值放在哪里

    前提知识 c0s调用main函数的地址: 11ah main函数的连接地址: 01fah 一.全局变量与局部变量 测试程序 int a1,a2,a3; void f(void); void g(voi ...

  9. OSSchedLock()函数透析

    uC/OS-II的OSSchedLock()和OSSchedUnlock()函数允许应用程序锁定当前任务不被其它任务抢占. 使用时应当注意的是:当你调用了OSSchedLock()之后,而在调用OSS ...

  10. 转: Linux C 动态内存分配 malloc及相关内容 .

    一.malloc()和free()的基本概念以及基本用法: 1.函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针 ...