2013-05-21 47 views
0

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

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; 
      } 
     } 
    } 

我真的不知道为什么发生这种情况,或者如果它是由于不能够应付大的渲染网格视图的计算机。谢谢!

+0

您在此网格中显示多少项? – Ofiris

+0

为了消除公式中的任何显示错误,请尝试检查源代码:其中的数据?如果是,但不显示:显示错误。如果不是......那么这是别的,很奇怪 –

+0

它取决于查询,但可能在平均100列和1000行的某处。我有一个小数据网格视图只有10列和5-20行相同的问题,所以我怀疑它是与数据集的大小做 – manicmonkey21421

回答

0

事实证明,datagridview的问题是默认情况下未启用双缓冲。我用一个自定义的datagridview类来启用双缓冲,从那时起我没有任何问题,我怀疑是因为有这么大的数据集,它在渲染整个区域时出现问题,而在它放弃的较低端的pcs中。我已经包含下面

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

,因为我发现它的堆栈溢出其它来源但它是一个不同的问题,我不能居功该代码的类。