2010-07-08 64 views
3

我從一個數據庫綁定到數據表至極保持數據的DataGridViewDataGridView的單元格顏色變化不工作

我做了檢查,如果日期是一個正確的時間範圍內

的功能,如果它的正確什麼發生。

否則有行/單元格的顏色變爲紅色

我嘗試了很多東西,但沒有任何工程

這裏是我創建的方法:


     private void CheckFactTermijn() 
     { 
      for (int i = 0; i < dataGridView1.Rows.Count; i++) 
      { 
       DateTime FactuurDatum = Convert.ToDateTime(dataGridView1.Rows[i].Cells[2].Value.ToString()); 
       int termijn = Convert.ToInt32(dataGridView1.Rows[i].Cells[7].Value.ToString()); 
       DateTime finalDate = FactuurDatum.AddDays((double)termijn);

if (finalDate > DateTime.Now) { } else { dataGridView1.Rows[i].DefaultCellStyle.BackColor = Color.Red; } } }

回答

1

我不確定您的代碼何時運行,但請嘗試在DGV的DataGridView.CellFormatting Event中設置DataGridView的DefaultCellStyle屬性。

上面的MSDN鏈接有一個你想要做的例子。

請注意,您不會遍歷DGV中的每一行(與您的方法一樣);您應該使用DataGridViewCellFormattingEventArgs ColumnIndex屬性來檢查事件觸發的列。

+0

如果我使用該事件,我仍然可以使用我創建的方法嗎? – Willem 2010-07-08 20:37:09

+0

THX DUDE ... 我使用了該事件並將其放入其中,並且它完美地運行了 – Willem 2010-07-09 09:44:29

0

dataGridView1.Rows [i] .DefaultCellStyle.BackColor = Color.Red;

必須更改整行的bakColor。 除具有自己的Style.BackColor集的單元格外。

您可以在句子處設置breakPoint以驗證它是否有效。

+0

它到達了ALRIGHT並且它讀取了該行,但它沒有執行任何操作 – Willem 2010-07-08 20:43:33

3

我相信解決方案在於當你設置顏色,而不是你這樣做的方法。已經提出了幾個不同的事件,其中一些事實上會起作用使用cellformatting,databindingcomplete甚至繪畫事件的問題之一是它們被多次觸發。從我所收集的內容來看,datagridview控件存在一個問題,因爲在顯示窗體後,您無法更改任何單元格的顏色。因此,運行的方法或調用Shown()之前觸發的事件不會更改顏色。作爲問題解決方案的事件通常有效,但由於它們被多次調用,可能不是最有效的答案。

問題的最簡單的解決辦法可能是將您的代碼填充到您的表單的Shown()方法中,而不是構造函數中。下面是msdn論壇中發佈的一篇文章的鏈接,它將我引入解決方案,它被標記爲答案約3/4。

MSDN forums post with the Solution

相關問題