2013-08-06 101 views
0

沒有什麼好的搜索,所以這裏有問題。DataGridView Row BackColor

我有一個通過SQL查詢填充datagridview的窗體。有一個日期列(存儲爲'delay_in_hours',用於確定如何更改行的BackColor。

問題是backColor沒有在窗體的初始加載時設置,只有當同一事件(loadSql)加載的形式被觸發(如按鈕,我有說要更新/刷新形式)

下面是摘錄:

public void loadSql(
    try 
    { 
    ... 

    foreach (DataGridViewRow r in sqlDataGridView.Rows) 
    { 
     if (delay_in_hours >= Program._delay_warn3) 
     { 
      r.DefaultCellStyle.BackColor = Color.Red; 
     } 
     else if (delay_in_hours >= Program._delay_warn2) 
     { 
      r.DefaultCellStyle.BackColor = Color.Orange; 
     } 
     else if (delay_in_hours >= Program._delay_warn) 
     { 
      r.DefaultCellStyle.BackColor = Color.Yellow; 
     } 
    } 

    sqlDataGridView.Refresh(); 
    sqlDataGridView.Update(); 
    } 
    catch (Exception ex) 
    { 
    MessageBox.Show("loadsql Exception:" + ex.Message + " STACK: " + ex.StackTrace.ToString()); 
    } 

我沒能做出'watch'用於背景顏色,我將一個觀察項目設置爲CellStyle的BackColor,但是當我迭代foreach時,所有項目/值保持不變,但是當forea ch已完成,即使手錶項目未更改值,行仍具有背景色。

什麼是造成這種情況的任何想法,或者我該如何調試backColor,以便確定爲什麼加載時最初沒有在窗體上設置顏色?

SK

+0

delay_in_hours有什麼價值?嘗試CellFormatting或CellPainting事件 – volody

+0

這是延遲部分的片段。我把它作爲一個double來處理,所以我可以做小時比較,因爲它是在幾秒鐘內返回的。 ...沒關係,我無法弄清楚如何在這個回覆中發佈代碼... – scryptKiddy

+0

在所有r.DefaultCellStyle.BackColor行上放置斷點來檢查這段代碼是否被執行 – volody

回答

0

我很幸運,使用RowPostPaint事件。

這裏有一個例子:

http://msmvps.com/blogs/deborahk/archive/2009/08/13/painting-on-the-datagridview.aspx

希望這有助於。

+0

有趣的代碼。我正在嘗試確定如何整合。當前的公共方法loadSql()在另一個類中。因此,如果我使用RowPostPaint事件,我不太清楚如何使用該事件,因爲該事件對於表單來說是私有的,並且對於具有loadSql()的類不可用。 – scryptKiddy