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); } }
效果如下: