C# DGV中以编程方式选中的复选框不显示为选中

C# DGV中以编程方式选中的复选框不显示为选中,c#,winforms,datagridview,C#,Winforms,Datagridview,我在用户权限管理的某些部分使用datagridview。 对于每个右侧,DGV中至少有一列复选框。 这些复选框是通过使用创建的 可以正常地或使用用于批量(取消)检查(全部选中、全部取消选中、全部反转)的上下文菜单来检查和取消选中这些选项。 当然,质量(取消)检查是通过编程完成的。示例代码片段“全部反转”: foreach(dgv.Rows中的DataGridViewRow dr) { dr.Cells[gridcol.Index].Value=!Convert.ToBoolean(dr.Cell

我在用户权限管理的某些部分使用datagridview。 对于每个右侧,DGV中至少有一列复选框。 这些复选框是通过使用创建的

可以正常地或使用用于批量(取消)检查(全部选中、全部取消选中、全部反转)的上下文菜单来检查和取消选中这些选项。 当然,质量(取消)检查是通过编程完成的。示例代码片段“全部反转”:

foreach(dgv.Rows中的DataGridViewRow dr)
{
dr.Cells[gridcol.Index].Value=!Convert.ToBoolean(dr.Cells[gridcol.Index].Value);
}
在非常特定的条件下,复选框的状态不会正确刷新:

  • 在DGV中带有复选框的单元格上单击鼠标左键(不一定(取消)选中流程中的复选框)
  • 单击上下文菜单按钮,该按钮将更改所单击单元格的内容
检查状态似乎保持不变。但是,如果单击其他位置以选择其他行,则检查状态显然会刷新

我曾尝试通过编程方式清除选择并选择不同的行,但这似乎无法解决问题-似乎您实际上需要单击不同的行来解决上述问题

dgv.ClearSelection();
dgv.Rows[2]。Selected=true//为了测试它,第2行只是一个随机的行
tbCtrlRights_SelectedIndexChanged(发送方,e);

哦,太简单了!我想我在不久前偶然发现了accross EndEdit,但我不会想到它也适用于这个特定的案例——它认为它是用于更改dgv的模式/结构。谢谢