目标:能够在触发事件处理程序时选中所有复选框。
当前: 事件处理程序按预期触发。我有一个 foreach 循环遍历每一行并选中该行中的复选框。
问题:如果我要在“全部选中”之前选择一行,则除了选中/突出显示的行中的复选框外,所有复选框都会被选中。如果我在此之后单击复选框区域之外的其他位置,则该复选框会自行检查。
问题:无论是否选中哪一行,我该如何做到同时选中所有复选框?
代码:
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;
}
尝试:我试过清除选择和暂停/恢复布局。我也尝试研究看看其他人是否遇到过同样的问题,但这是一个很难找到的主题。
非常感谢任何对解决方案有帮助的优雅建议或引用!谢谢!
更新了优雅的解决方案和解释:发生这种副作用的原因是 DataGridViewCheckBoxCell 认为它仍然处于编辑模式,无论何时您碰巧选择单元格(或者看起来,您正在选择该行)。为了解决这个问题,下面是我放在 foreach 循环之前的代码,它帮助我解决了这个问题:
if (mTargets.IsCurrentCellInEditMode)
{
mTargets.EndEdit();
}
最佳答案
之所以会出现这种副作用,是因为 DataGridViewCheckBoxCell 认为只要您碰巧选择了单元格(或者看起来您正在选择该行),它仍处于编辑模式。为了解决这个问题,下面是我放在 foreach 循环之前的代码,它帮助我解决了这个问题:
if (mTargets.IsCurrentCellInEditMode)
{
mTargets.EndEdit();
}
关于c# - 同时选中DataGridView中的所有复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25812808/