【问题标题】:Check all check boxes in DataGridView at the same time同时选中DataGridView中的所有复选框
【发布时间】:2014-11-06 21:35:29
【问题描述】:

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

当前: 事件处理程序按应有的方式触发。我有一个 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();
}

【问题讨论】:

    标签: c# .net winforms checkbox datagridview


    【解决方案1】:

    我以前也遇到过这个问题。并不是它没有设置那个值,它只是没有正确绘制。我修复它的方法(目前还不是想法,但可行)是设置复选框值,然后将选定的行更改为另一行,然后将其更改回来。

    【讨论】:

    • 这肯定需要更少的工作来修复。我也会试试这个。但这与我清除选择有何不同?对我来说,这似乎是一回事。我只是很困惑为什么会发生这种情况,因为我很确定我们不是唯一经历过这种情况的人。 “全选”是一种流行的功能。
    • DataGridView 是一个非常复杂的控件,因此它会做很多非常奇怪的事情。这可能是重绘代码中的一个小错误,无法正确重绘复选框。清除选择与将选择更改为 DataGridView 不同,您会认为它会相似,但在控件深处的某个地方它的工作方式不同。
    • 我试过这个,但它对我不起作用。 :( 根据我更改选择的位置,它可以工作一半。
    • 如果它只工作了一半,这可能是时间问题,请尝试在重新选择之前放置一个短的 Thread.Sleep。从小到 100 毫秒开始,然后增加,看看是否可以获得一致的结果。
    • 那行不通。回到原来的行为。太奇怪了! 编辑:实际上,它仍然有一半的时间。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-14
      • 2013-04-26
      • 1970-01-01
      • 2014-06-20
      相关资源
      最近更新 更多