我有一个DataGridView dgView,我用几种不同的表单填充它,例如DataGridViewCheckBoxColumn。为了处理事件,我添加了
private void InitializeComponent()
{
...
this.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgView_CellClick);
...
}
实现看起来像:
private void dgView_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (Columns[e.ColumnIndex].Name == "Name of CheckBoxColumn") // this is valid and returns true
{
Console.WriteLine("Handle single click!");
// How to get the state of the CheckBoxColumn now ??
}
}
这就是我卡住的地方。我已经尝试了不同的方法,但根本没有成功:
DataGridViewCheckBoxColumn cbCol = Rows[e.RowIndex].Cells[e.ColumnIndex] as DataGridViewCheckBoxColumn; // does not work
DataGridViewCheckBoxColumn cbCol = (DataGridViewCheckBoxColumn)sender; // nor this
if (bool.TryParse(Rows[e.RowIndex].Cells[e.ColumnIndex].EditedFormattedValue.ToString(), out isBool)) // nor this
{ ... }
有人可以指出如何检索此 CheckBoxColumn 的状态吗?此外,是否存在任何其他事件直接解决 CheckBoxColumn ?(比如“ValueChanged”什么的)
更新: 方法
DataGridViewCell dgvCell = Rows[e.RowIndex].Cells[e.ColumnIndex];
Console.WriteLine(dgvCell.Value);
至少在通过单击单元格更改(或不更改)值之前的时间点返回真/假。但总而言之,应该有一个直接解决 CheckBoxColumn 的解决方案。
解决方案: 有时答案太明显而无法看到。我面临的问题是单击单元格以及单击复选框时触发了“CellClick”事件。因此,正确的处理是改用“CellValueChanged”事件:
private void InitializeComponent()
{
...
this.CellValueChanged += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgView_CellValueChanged);
...
}
要确定复选框的值,我使用与上述相同的方法:
if (e.ColumnIndex != -1 && Columns[e.ColumnIndex].Name == "Name of Checkbox")
{
bool cbVal = Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
}