2015-02-10 302 views
0

我已經通過Visual Studio IDE設置了AlternatingRowStyle BackColor,我的問題是,如果我根據某些條件修改了單元格的BackColor,我該如何將它「取消設置」爲正確的行顏色(即白色或交替行顏色),而不訴諸RowIndex的模。使用DataGridView恢復交替行顏色

我試圖與明顯成功以下,但我不是100%,如果是這樣的解決方案:

private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
    { 
     double d = Convert.ToDouble(e.Value); 

     if (d > 5) 
     { 
      e.CellStyle.BackColor = Color.Red; 
     } 
     else 
     { 
      e.CellStyle.ApplyStyle(dataGridView1.RowsDefaultCellStyle); 
     } 
    } 
+0

什麼是明顯的成功?你打算準確達到什麼? – chouaib 2015-02-10 02:41:35

+0

基本上,如果一個奇數行(如Color.White)由於條件而被設置爲紅色,當它不再符合條件時,它將被設置爲白色。並且,當偶數行(如Color.Yellow)由於條件而設置爲紅色時,如果不再滿足條件,則會將其設置爲黃色。通過顯而易見的成功,我的意思是它似乎有效,但我沒有機會廣泛測試,並試圖找出是否有更好的方法。我試過搜索,但很難說 – Tony 2015-02-10 02:54:44

回答

0

你應該使用DataGridViewCellPainting,編輯CellStyleDataGridViewCellPaintingEventArgs

看來,e.CellStyle實際上並不影響cell.CellStyle,這意味着如果條件不符合,則不需要重置單元格

0

因爲您決定了backColor根據它們的值,我建議你使用CellValueChanged事件。

我假定奇數行,是黃色的和甚至行是通過默認的白色,在情況下,任何小區滿足條件(值> 5)這將是以紅色顯示。

private void dataGridView1_CellValueChanged(object sender,DataGridViewCellEventArgs e) 
{ 
    int col = e.ColumnIndex; 
    int row = e.RowIndex; 
    double d = Convert.ToDouble(dataGridView1[col, row].Value); 

    switch (row%2) 
    { 
     case 0: 
      if (d > 5) 
       dataGridView1[col, row].Style.BackColor = Color.Red; 
      else 
       dataGridView1[col, row].Style.BackColor = Color.White; 
     break; 
     case 1: 
      if (d > 5) 
       dataGridView1[col, row].Style.BackColor = Color.Red; 
      else 
       dataGridView1[col, row].Style.BackColor = Color.Yellow; 
     break; 
    } 
}