有没有办法阻止DataGridViewCheckBoxColumn自动检查点击?
问题描述:
我正在使用DataGridView并有几个DataGridViewCheckBoxColumns设置,其中两个将ThreeState属性设置为True。有没有办法阻止DataGridViewCheckBoxColumn自动检查点击?
对于我网格中的一些行,我只希望复选框是Checked或Indeterminate。未经检查的应该永远不可用于用户。但是,如果用户重复点击复选框,它将从检查到不确定状态变为未选中状态。我只想让它去检查,不确定,检查,不确定等。
有没有办法打开停止复选框被点击时被选中/取消选中(类似于标准Windows窗体复选框控件上的AutoCheck属性),或者是否有一个事件可以用来取消DataGridViewCheckBoxCell的选中更改?
我试图以编程方式强制检查的单元格从未选中检查或不确定,但用户界面从未反映过这一点。
答
假设任何DataGridViewCheckBoxColumn
您添加沿袭的模式:
DataGridViewCheckBoxColumn cbc = new DataGridViewCheckBoxColumn();
cbc.ThreeState = true;
this.dataGridView1.Columns.Add(cbc);
然后,所有你需要做的是下面的事件处理程序添加到您的DataGridView
的单击和双击复选框:
this.dataGridView1.CellContentClick += ThreeState_CheckBoxClick;
this.dataGridView1.CellContentDoubleClick += ThreeState_CheckBoxClick;
private void ThreeState_CheckBoxClick(object sender, DataGridViewCellEventArgs e)
{
DataGridViewCheckBoxColumn col = this.dataGridView1.Columns[e.ColumnIndex] as DataGridViewCheckBoxColumn;
if (col != null && col.ThreeState)
{
CheckState state = (CheckState)this.dataGridView1[e.ColumnIndex, e.RowIndex].EditedFormattedValue;
if (state == CheckState.Unchecked)
{
this.dataGridView1[e.ColumnIndex, e.RowIndex].Value = CheckState.Checked;
this.dataGridView1.RefreshEdit();
this.dataGridView1.NotifyCurrentCellDirty(true);
}
}
}
本质上,切换顺序默认为:Checked => Indeterminate => Unchecked => Checked
。因此,当点击事件触发Uncheck
值时,您将其设置为Checked
,并强制网格用新值刷新。
非常感谢你,这个伎俩。我在正确的道路上,但没有最后两行来刷新和通知。谢谢 :) – AndyG