DataGridView的DataGridViewComboBoxColumn列点击一次,自动处于编辑状态

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

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

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

private void IniteDGV()
        {
            DataGridViewComboBoxColumn combo = new DataGridViewComboBoxColumn();
            combo.HeaderText = "comboBox列";
            combo.Name = "combo";
            combo.Width = 80;
            combo.DataSource=(new string[] { "0", "1", "2" });

            DataGridViewTextBoxColumn textbox = new DataGridViewTextBoxColumn();
            textbox.HeaderText = "textbox列";
            textbox.Name = "textbox";
            textbox.Width = 100;

            dataGridView.Columns.AddRange(combo, textbox);
            DataGridViewRow row = new DataGridViewRow();
            dataGridView.Rows.Add(row);

            if (dataGridView.Columns.Contains("combo") )
            {
                row.Cells["combo"].Value = "0";
            }

 }

View Code

 

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

方法一:

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

CellClick事件
private void dataGridView_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0 && e.ColumnIndex >= 0)
            {
                DataGridViewComboBoxColumn combo = dataGridView.Columns[e.ColumnIndex] as DataGridViewComboBoxColumn;
                if (combo != null)  //如果该列是ComboBox列
                {
                    dataGridView.BeginEdit(false); //结束该列的编辑状态
                    DataGridViewComboBoxEditingControl comboEdite = dataGridView.EditingControl as DataGridViewComboBoxEditingControl;
                    if (comboEdite != null)
                    {
                        comboEdite.DroppedDown = true; //展现下拉列表
                    }
                }

                DataGridViewTextBoxColumn textbox = dataGridView.Columns[e.ColumnIndex] as DataGridViewTextBoxColumn;
                if (textbox != null) //如果该列是TextBox列
                {
                    dataGridView.BeginEdit(true); //开始编辑状态
                }
            }
        }

View Code

 

方法二:

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

CellEnter事件
private void dataGridView_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
            DataGridView dgv = sender as DataGridView;

            if (dgv != null)
            {
                if (dgv.Columns[e.ColumnIndex].Name == "combo" &&
                   dgv.Columns[e.ColumnIndex] is DataGridViewComboBoxColumn)
                {
                    SendKeys.Send("{F4}"); //选中ComboBox列时,相当于按了键盘的F4键
                }
            }
        }

View Code

 

时间: 2024-10-30 15:05:46

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

DataGridView控件为何不能拖拽和拉伸(编辑状态下)?

问题描述 按下鼠标:移动鼠标:选中控件时不能拉伸调整,按下鼠标后无法拖拽控件,控件会从屏幕上消失,鼠标弹起后,又恢复到第一张图里的样子请各位高手给解答下啊.VS已经重装过了,用的是别人那边运行没问题的安装包. 解决方案 解决方案二:添加panel控件.picturebox控件后也是一样的效果.而且会使得button.checkbox这些控件也变成和它们一样的效果.解决方案三:大神们,帮忙看看啊~~解决方案四:你设置的属性问题..有不少属性都会导致此结果.你可以尝试重新建一个窗口,然后放datag

vb.net的datagridview中,如何点击指定列的任意单元格之后,弹出一个窗体来修改本行数据

问题描述 vb.net的datagridview中,如何点击指定列的任意单元格之后,弹出一个窗体来修改本行数据 大神们,求救啊!!我在VB.NET 中的datagridview中显示了数据库中部分信息,怎么通过点击更多字样来弹出另一个窗体 并在这个新窗体中修改那一行里的信息,并传回数据可库?大概就是实现这样的功能 解决方案 http://www.cnblogs.com/milo_yu/archive/2010/04/19/1715291.html

C#datagridview的combobox列下拉列表框背景为黑色?Why?

问题描述 datagridview的comboboxcolumn列在EditingControlShowing事件中添加了SelectedIndexChanged第一次点击下拉框正常,再点击其他combobox列时下拉框背景就变黑了,只有选中项能看到字,其他都看不到(如图),所有的combobox都是,在线求助..谢谢 解决方案 解决方案二:combobox是怎么添加的??解决方案三:各位大神看过来呀解决方案四:引用1楼duanzi_peng的回复: combobox是怎么添加的?? 直接将da

有关c#DateGridView的DataGridViewComboBoxColumn列问题

问题描述 有关c#DateGridView的DataGridViewComboBoxColumn列问题 在我的DateGridView控件中有一列是DataGridViewComboBoxColumn,我使用Datagridview.Rows.Add()方法添加新的数据,现在有一个问题,就是我想每一行中的DataGridViewComboBoxColumn列的Items数据不同,比方说第一行表示小明喜欢吃什么水果,那么DataGridViewComboBoxColumn下拉框中的Items中就有

怎么设置datagridview中某列的单元格为下拉形式 ?

问题描述 怎么设置datagridview中某列的单元格为下拉形式?下列的时候要显示一个三列的网格.当在datagridview中单元格输入条件时,下拉网格中的值也随之变化. 解决方案 解决方案二:该列使用DataGridViewComboboxColumn解决方案三:引用1楼fangxinggood的回复: 该列使用DataGridViewComboboxColumn 这个好像不行吧..1.用combobox好像只能显示一列..(我要显示多列)2.用Combobox在我输入值时不能查找comb

vb.net连接sql数据库查询表格名显示到 DataGridView中,如何点击选择一个表名查询整个表的内容

问题描述 我的代码如下,怎么解决这个问题啊,想了很久.button1是查询表名,button2是查询选中的表内容PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimstrConnectionAsString="Server=DELL-PCSQLEXPRESS;database=renshi;uid=ouqing;pwd=123;"Dimsql

C#中选择dataGridView里的数据,点击一个按钮,怎么把值传到另外一个页面

问题描述 C#中选择dataGridView里的数据,点击一个修改按钮,怎么把dataGridView的数据传到修改页面 解决方案 解决方案二:有个属性设置的解决方案三:你的修改页面是一个单独的页面??是的话,你点击修改按钮的时候,传递一个该行记录在数据库中的一个关键列,如ID过去就可以了,然后在你的那个页面中通过获取该ID来从数据库中获取数据,并绑定到各个控件上显示,如TextBox等,然后修改的时候,将这些数据重新更新到数据库,就根据传递过来的这个记录的ID即可.解决方案四:楼上的只是文字说

mysql-C# Mysql datagridview控件 列标题中文乱码问题

问题描述 C# Mysql datagridview控件 列标题中文乱码问题 用C#从Mysql中读取数据到datagridview控件中,结果列标题中文乱码,内容没事.代码如下: string commstr = "SELECT Patient_ID as ID,NAME as 姓名,TARGET as 患侧,DIAGNOSIS as 诊断 FROM PatientInfo"; this.data_case.DataSource = DBOperate.DBOperate.selec

DataGridView中有一列是ComBox类型的列,请问我怎么在程序中向这一列中赋值呢?

问题描述 DataGridView中有一列是ComBox类型的列,请问我怎么在程序中向这一列中赋值呢?例如下面的代码所示:intdataGridViewRowNumber=(int)dataGridView1.Rows.Count;//for(inti=0;i<dataGridViewRowNumber;i++){dataGridView1.Rows[i].Cells[2].Value="想在Combox列中显示的值";}但是像上面的这种赋值方式会出现错误,请大家帮忙出出主意,谢