目标:能够在触发事件处理程序时检查所有复选框。
当前:事件处理程序应该触发。我有一个遍历每一行的foreach循环并检查该行中的复选框。
问题:如果我要在“全部检查”之前选择一行,则会选中所有复选框,但选中/突出显示的行中的复选框除外。如果我在此之后单击复选框区域之外的其他位置,则复选框将自行检查。
问题:如何在同一时间检查所有复选框,无论选择哪一行?
CODE:
foreach (DataGridViewRow row in mTargets.Rows)
{
//row.Cells[(int) menuItem.Tag].Value is the check box
//mDeselect is the boolean that I want to set
row.Cells[(int) menuItem.Tag].Value = !mDeselect;
}
ATTEMPTS :我已尝试清除选择并暂停/恢复布局。我也试图研究,看看其他人是否有同样的问题,但这是一个很难找到的话题。
任何优雅的建议或对解决方案的参考都非常感谢!谢谢!
更新优雅解决方案&解释:这种副作用发生的原因是由于DataGridViewCheckBoxCell在您选择单元格时(或者看起来,您正在选择该行)认为它仍处于编辑模式这一事实。为了解决这个问题,这里是我在foreach循环之前放置的代码,它帮助我解决了这个问题:
if (mTargets.IsCurrentCellInEditMode)
{
mTargets.EndEdit();
}
答案 0 :(得分:3)
这种副作用发生的原因是由于DataGridViewCheckBoxCell在您碰巧选择单元格时认为它仍然处于编辑模式(或者看起来,您正在选择该行)。为了解决这个问题,这里是我在foreach循环之前放置的代码,它帮助我解决了这个问题:
if (mTargets.IsCurrentCellInEditMode)
{
mTargets.EndEdit();
}
答案 1 :(得分:0)
我之前也遇到过这个问题。它不是没有设置该值,它只是没有正确绘制。我修复它的方式(到目前为止不知道,但有效)是设置复选框值,然后将所选行更改为另一行,然后将其更改回来。