2013-05-21 147 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; 
     } 
    } 

,因爲我發現它的堆棧溢出其它來源但它是一個不同的問題,我不能居功該代碼的類。