DataGridView控件3——常用事件

DataGridView的常用事件:

1、CellClick,CellContentClick,CellDoubleClick

2、CellValueChanged,CurrentCellDirtyStateChanged


 

1、CellChanged事件和CellContentClick事件,功能相似。CellDoubleClick和CellClick区别仅在于单击和双击

其区别在于:

CellChanged事件,点击表格内任意部分即可触发事件。

CellContentClick事件,必须点击到表格内的内容时才能触发事件。

注意,使用CellChanged事件和CellContentClick事件时不能点击表头,会引发异常。

复制代码
        private void dataGridView2_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0)
            {
                //DataGridViewCell cell = dataGridView2.Rows[e.RowIndex].Cells[e.ColumnIndex];//通过行标和列表获得当前单元格
                DataGridViewCell cell = dataGridView2.CurrentCell;//通过CurrentCell属性直接获得当前单元格                
                MessageBox.Show(cell.Value.ToString());
            }
        }

        private void dataGridView2_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0)
            {
                //DataGridViewCell cell = dataGridView2.Rows[e.RowIndex].Cells[e.ColumnIndex];//通过行标和列表获得当前单元格
                DataGridViewCell cell = dataGridView2.CurrentCell;//通过CurrentCell属性直接获得当前单元格                
                MessageBox.Show(cell.Value.ToString());
            }
        }
复制代码

 

2、单元格的Value属性和FormattedValue属性

实现效果如下:

  

 列编辑中,选择列没有做数据绑定,而性别列做了数据绑定,以及

  

 

 而且班级列绑定了班级数据源,如下:

 

 

 使用单元格的单击事件获取单元格的值:

        private void dataGridView2_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            DataGridViewCell cell = dataGridView2.Rows[e.RowIndex].Cells[e.ColumnIndex];
            //MessageBox.Show(cell.FormattedValue.ToString());
            MessageBox.Show(cell.Value.ToString());                
        }

获取单元格的值有两种方法,但是效果不同:

方法1,使用Value属性

单击选择列,报错;

单击性别列,显示男或者女;

单击班级列,显示班级Id;

方法2,使用FormattedValue属性

单击选择列,显示true或者false;

单击性别列,显示true或者false;

单击班级列,显示班级名称;

 

知识点3,checkBox类型的单元格,如何实时获得改变后的值

比如,点击单元格内的CheckBox获得的值没有发生变化,原因是只修改了内容并没有提交。

 

 解决办法,增加CurrentCellDirtyStateChanged事件即可,如下: 

        private void DataGridView2_CurrentCellDirtyStateChanged(object sender, EventArgs e)
        {
            if (dataGridView2.IsCurrentCellDirty)
            {
                dataGridView2.CommitEdit(DataGridViewDataErrorContexts.Commit);
            }
        }

效果如下:

 

 

 

posted on   hanzq_go  阅读(2617)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示