2016-11-22 4 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

Ошибка на выходе кода? –

+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; 
      } 
     } 
Смежные вопросы