一尘不染

如何检测DataGridView CheckBox事件更改?

c#

我有一个winforms应用,当控件中嵌入的复选框DataGridView被选中/未选中时,想要触发一些代码。我尝试过的每件事

  1. CheckBox单击时立即触发,但在其检查状态更改之前触发,或
  2. 仅在CheckBox失去焦点时触发

我似乎找不到在检查状态更改后立即触发的事件。


编辑:

我想要实现的是,当一个CheckBox中的a的检查状态DataGridView发生变化时,另外两个中的数据DataGridView发生变化。然而,我使用的所有事件以及其他网格中的数据仅CheckBox在第一个DataGridView失去焦点之后才发生变化。


阅读 834

收藏
2020-05-19

共1个答案

一尘不染

要处理DatGridViews
CheckedChanged事件,您必须首先CellContentClick触发(没有CheckBoxes当前状态!),然后调用CommitEdit。这将依次触发CellValueChanged您可以用来完成工作的事件。
这是Microsoft的疏忽 。做类似以下的事情…

private void dataGridViewSites_CellContentClick(object sender, 
    DataGridViewCellEventArgs e)
{
    dataGridViewSites.CommitEdit(DataGridViewDataErrorContexts.Commit);
}

/// <summary>
/// Works with the above.
/// </summary>
private void dataGridViewSites_CellValueChanged(object sender, 
    DataGridViewCellEventArgs e)
{
    UpdateDataGridViewSite();
}

我希望这有帮助。

PS检查本文https://msdn.microsoft.com/zh-
cn/library/system.windows.forms.datagridview.currentcelldirtystatechanged(v=vs.110).aspx

2020-05-19