0

我有一个 datagridview,我使用 dgv.DataSource = table 从数据源填充它。然后,我使用单元格格式化事件根据值更改 datagridview 中特定单元格的颜色。我面临的问题是,当查看某些 pc 上的数据时,一些随机单元格将显示为白色,其中没有数据。我用来设置颜色的代码如下,但它不仅仅是我设置自定义的单元格出现白色的颜色:

    private void dgvRaw_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
    {
        if (e != null)
        {
            DataGridView dgv = (DataGridView)sender;

            if (dFlags.ContainsKey(dgv.Columns[e.ColumnIndex].Name))
            {
                e.CellStyle.ForeColor = Color.Black;
                // If pass set green else set red 
                if (e.Value != null)
                {
                    if (e.Value.ToString() == "0")
                        e.CellStyle.BackColor = System.Drawing.Color.Green;
                    else
                        e.CellStyle.BackColor = System.Drawing.Color.Red;
                }
                else
                    e.CellStyle.BackColor = System.Drawing.Color.Orange;
            }
        }
    }

我真的不知道为什么会发生这种情况,或者是否是由于计算机无法处理渲染大网格视图。谢谢!

4

1 回答 1

0

事实证明,datagridview 的问题是默认情况下不启用双缓冲。我使用了一个自定义的 datagridview 类来启用双缓冲,从那以后我没有遇到任何问题,我怀疑是因为有这么大的数据集,它在渲染整个区域时遇到了问题,而在低端电脑上它只是放弃了。我已经包括了下面的课程

    /// <summary>
    /// Custom datagridview to enable double buffering
    /// </summary>
    public class MyDataGridView : DataGridView
    {
        public MyDataGridView()
        {
            DoubleBuffered = true;
        }
    }

我不能相信这段代码,因为我在 Stack Overflow 上的另一个来源上找到了它,但它是针对不同的问题。

于 2013-05-23T07:03:36.023 回答