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 2022-10-30 22:59  hanzq_go  阅读(2169)  评论(0编辑  收藏  举报

导航