我找到了几篇对此有“答案”的帖子,但没有一篇对我有用。为什么本应如此简单的事情却如此困难?
我只想做一些事情来响应某人选中/取消选中一列复选框。一种解决方案在大多数情况下都有效,但有时不会触发事件。我在几个地方看到的建议是这样的:
private void dgv1_CurrentCellDirtyStateChanged(object sender, EventArgs e) {
if (dgv1.IsCurrentCellDirty) {
dgv1.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
}
private void dgv1_CellValueChanged(object sender, DataGridViewCellEventArgs e) {
// Do whatever I want to do.
}
不幸的是,CellValueChanged 根本没有被调用。 我已经检查并仔细检查是否添加了两个监听器:
dgv1.CellValueChanged += new DataGridViewCellEventHandler(dgv1_CellValueChanged);
dgv1.CurrentCellDirtyStateChanged += new EventHandler(dgv1_CurrentCellDirtyStateChanged);
我向两种方法都添加了打印语句,以验证 CellValueChanged 方法从未被调用,尽管 CurrentCellDirtyStateChanged 方法被调用了。我做错了什么?
编辑: 我将 DataTable 与此 DataGridView 一起使用。我听那个会更好吗?在我离开单元格之前,DataTable 中是否发生了变化?
最佳答案
试一试。但是这次在CellContentClick
事件。
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
switch (e.ColumnIndex)
{
case 0: //Where the DataGridViewCheckBoxColumn Index
dataGridView1[e.ColumnIndex, e.RowIndex].Value =
!(bool) dataGridView1[e.ColumnIndex, e.RowIndex].Value;
if ((bool)dataGridView1[e.ColumnIndex, e.RowIndex].Value)
{
//Something to do
}
break;
}
}
选项:您可以将 DataGridViewCheckBoxColumn
属性设置为 readonly = true
。
关于c# - 听一个复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21630957/