在单击另一个控件

时间:2018-06-29 15:18:12

标签: c# winforms checkbox datagridview

我为DataGridView实现了一个标题复选框(from this answer),该复选框选中/取消选中所有复选框。它适用于除第一个复选框以外的所有复选框。仅在单击另一个控件后,第一个复选框才会更新其状态,如下所示:

GIF

甚至后来我注意到,不会更新其状态的复选框是手动单击的最后一个复选框。

enter image description here

说实话,我什至不完全知道发生了什么。我尝试过的工作是创建一个不可见的虚拟按钮,然后PerformClick(),希望将其视为对控件的单击,并会更新复选框的状态。

我也研究了Refresh()Update()Invalidate(),但是复选框单元格没有这些方法,我无法做到。

选中/取消选中标题复选框时,将启动此功能:

private bool selectAllChecked = false;
private void SelectAll(object sender, EventArgs e) {
    selectAllChecked = !selectAllChecked;

    foreach (DataGridViewRow row in myGridView.Rows) {
        DataGridViewCheckBoxCell checkb = (DataGridViewCheckBoxCell)row.Cells["Checkbox"];
        checkb.Value = selectAllChecked;
    }
}

1 个答案:

答案 0 :(得分:0)

好像我只是尝试刷新/更新/使复选框单元格无效,而不是DataGridView,并且我使用了错误的方法。

在我的DataGridView(myGridView.RefreshEdit())上调用RefreshEdit会更新复选框的状态。

我仍然不确定为什么甚至会发生这种情况,但这可以解决。