如上图所示完成功能:
在 DataGridView 中根据对“选择”的读取,来读取“工单号”,在根据“工单号”来获取工单类,从而进行批量分派。
1. 用到了 datagridview 的 CurrentCellDirtyStateChanged 和 CellValueChanged 两个事件
2. CurrentCellDirtyStateChanged 事件是提交对 checkbox 状态的修改, CellValueChanged 事件是当状态提交后,也就是单元格值改变后做一些其它的操作,这里是将 checkbox 列的 true 或 fa lse 状态作为 tooptiptext 属性设置到同一行的 button 列
3. 问题:为什么要使用
this.dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit); ?
因 为当我们对 checkbox 的 cell 进行编辑后,你会看到在 RowHeader 上显示一个笔的形状的东西,这说明此列正在编辑,如果直接用 Value 获 取值,则会获得在编辑之前的值,使用了 CommitEdit 方法后,我们再调用 Value 属性就会获得你看到的值,当然这句话也可以放在 dataGridView 的事件里面进行处理,就不需要再每次遍历之前执行这句了。
4. 具体代码如下:
A. 先定义变量:
List <int > rows = new List <int >();
B. 分别写 CurrentCellDirtyStateChanged 和 CellValueChanged 事件
private void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
if (this .dataGridView1.IsCurrentCellDirty){
this .dataGridView1.CommitEdit(DataGridViewDataErrorContexts .Commit);
}
}
//DateGridView 中的复选框值被改变触发的事件
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (this .dataGridView1.Columns[e.ColumnIndex].Name.Equals("select" )){
DataGridViewCheckBoxCell dgvCheckBoxCell = this .dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex] as DataGridViewCheckBoxCell ;// 获得checkbox 列单元格
string boolFlag = dgvCheckBoxCell.Value.ToString();