【问题标题】:C# DataGridView 1st CheckBox Cell redrawing as unchecked. Why?C# DataGridView 1st CheckBox 单元格重绘为未选中状态。为什么?
【发布时间】:2018-10-06 04:37:30
【问题描述】:

问题已解决 - 发布以供参考。

您好,我发生了一个奇怪的错误。 我有一个用于存储记录列表的 DataGridView,这些记录由 BackgroundWorker 从源更新。有一个 CheckBox Column 允许用户从 DataGridView 中选择记录进行处理。

当我选中 CheckBox 的第一行(并且只有第一行)时,复选框似乎没有正确刷新并显示为未选中。该复选框仍被视为已选中,并且与其相关的逻辑工作正常。这是一个可能使用户感到困惑的外观问题。 DataGridView 中的任何其他 CheckBox 始终正确绘制。

单击 DataGridView 上的任意位置会导致 CheckBox 状态正确重绘。

这似乎是一个重绘问题,但我无法追踪它为什么会这样绘制。

一些相关的细节。

每次刷新时我都需要重新加载数据集。

我已将单元格突出显示颜色设置为与未突出显示的颜色相同。

我有一个例程检查复选框的选中状态,记录已选择的记录并在替换数据集时重新选中复选框。 - 这工作正常

见以下代码。

private void BgwDocketList_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {

        var checkedRows = from DataGridViewRow r in Dgv_Batch.Rows
            where Convert.ToBoolean(r.Cells[0].Value) == true
            select r;

        List<int> L = new List<int>();

        foreach (DataGridViewRow x in checkedRows)
        {
            L.Add((int)x.Cells[1].Value);
        }
        Dgv_Batch.DataSource =e.Result;
        foreach (DataGridViewRow v in Dgv_Batch.Rows)
        {
            if (L.Count(x=>x==(int)v.Cells[1].Value)>0)
            {
                v.Cells[0].Value = true;
            }
        }
    }

已尝试以编程方式更改选定的单元格 我尝试将焦点设置到 DataGridView 以尝试以编程方式重新创建单击控件的效果。这不会重绘复选框。似乎只需单击鼠标即可。

...好的...

在写这篇文章时,我已经设法解决了这个问题。我想写下这些步骤以确保它们被签出会有所帮助。

问题是更新复选框后我需要使用

 DataGridView.EndEdit()

我本来希望该例程最后一个记录而不是第一个记录。我猜这与包含反向索引的 DataGridView.DataGridViewSelectedRowCollection 有关。

无论如何我已经发布了这个问题,希望它可以帮助遇到同样问题的人。

【问题讨论】:

    标签: c# checkbox datagridview webforms


    【解决方案1】:

    利用

    DataGridView.EndEdit();
    

    这样就可以解决问题了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-06
      • 1970-01-01
      • 1970-01-01
      • 2012-11-01
      • 2015-08-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多