同时选中DataGridView中的所有复选框

时间:2014-09-12 16:29:27

标签: c# .net winforms checkbox datagridview

目标:能够在触发事件处理程序时检查所有复选框。

当前:事件处理程序应该触发。我有一个遍历每一行的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();
}

2 个答案:

答案 0 :(得分:3)

这种副作用发生的原因是由于DataGridViewCheckBoxCell在您碰巧选择单元格时认为它仍然处于编辑模式(或者看起来,您正在选择该行)。为了解决这个问题,这里是我在foreach循环之前放置的代码,它帮助我解决了这个问题:

if (mTargets.IsCurrentCellInEditMode)
{
    mTargets.EndEdit();
}

答案 1 :(得分:0)

我之前也遇到过这个问题。它不是没有设置该值,它只是没有正确绘制。我修复它的方式(到目前为止不知道,但有效)是设置复选框值,然后将所选行更改为另一行,然后将其更改回来。