2016-11-22 84 views
0

我有一個DataGridView與幾列,其中之一是「校準到期日期」。我正在尋找一種方法,如果校準截止日期已過,則將行的顏色更改爲紅色;如果校準截止日期之前還不到一個月,則更換爲藍色。根據列日期更改DataGridView中的行顏色

我曾嘗試下面的代碼沒有做任何事情:

private void Form1_Load(object sender, EventArgs e) 
{ 
    foreach (DataGridView row in instrumentsDataGridView.Rows) 
    { 
     var now = DateTime.Now; 
     var expirationDate = DateTime.Parse(instrumentsDataGridView.Columns["CalibrationDue"].ToString()); 
     var Month = expirationDate.AddDays(-30); 

     if (now > Month && now < expirationDate) 
      row.DefaultCellStyle.BackColor = Color.Blue; 
     else if (now > expirationDate) 
      row.DefaultCellStyle.BackColor = Color.Red; 
    } 
} 
+0

紅色和藍色的顏色沒有出現? –

+0

Dint你的代碼輸出任何錯誤? –

+0

@JonesJoseph既不顯示顏色,也不顯示錯誤 – Sanaa

回答

0

做它在CellFormatting事件:

private void DataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
{ 
    if (e.ColumnIndex == instrumentsDataGridView.Columns["CalibrationDue"].Index) 
    { 
     if (e.Value == null) 
      return; 

     var now = DateTime.Now; 
     var expirationDate = (DateTime)e.Value; 
     var month = expirationDate.AddDays(-30); 

     var row = instrumentsDataGridView.Rows[e.RowIndex]; 

     if (now > month && now < expirationDate) 
      row.DefaultCellStyle.BackColor = Color.Blue; 
     else if (now > expirationDate) 
      row.DefaultCellStyle.BackColor = Color.Red; 
    } 
} 
+0

顏色仍然沒有出現 – Sanaa

+0

@Sanaa如果你沒有添加CellFormatting事件處理程序,你可以檢查https://msdn.microsoft.com/en-us/library/dd492149.aspx – Slai

0

可以使用DataGridViewRow.Cells物業:

DateTime now = DateTime.Now, thirtyDaysAgo = now.AddDays(-30), expirationDate; 

foreach (DataGridViewRow row in instrumentsDataGridView.Rows) 
{ 
    string cellText = row.Cells["CalibrationDue"].Value + ""; 

    if (DateTime.TryParse(cellText, out expirationDate)) 
    { 
     if (expirationDate < now) 
      row.DefaultCellStyle.BackColor = Color.Red; 
     else if (expirationDate > thirtyDaysAgo) 
      row.DefaultCellStyle.BackColor = Color.Blue; 
    } 
} 
+0

試過,仍然沒有顏色。我想我可能需要把代碼放在其他地方而不是表單加載函數? – Sanaa

+0

@Sanaa在添加行之後它必須是,並且您可以使用調試器查看是否達到顏色語句。 – Slai

+0

是的,我現在已經改變它,它終於工作了! – Sanaa

0

我把代碼放在錯誤的地方。我已經把下面的代碼爲另一種形式的源代碼(表單輸入信息到DataGridView)和它現在的工作:

DateTime now = DateTime.Now, thirtyDaysAgo = now.AddDays(-30), expirationDate; 

     foreach (DataGridViewRow row in form.instrumentsDataGridView.Rows) 
     { 
      string cellText = row.Cells["CalibrationDue"].Value + ""; 

      if (DateTime.TryParse(cellText, out expirationDate)) 
      { 
       if (expirationDate < now) 
        row.DefaultCellStyle.BackColor = Color.Red; 
       else if (expirationDate > thirtyDaysAgo) 
        row.DefaultCellStyle.BackColor = Color.PaleTurquoise; 
      } 
     }