2016-11-22 82 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; 
      } 
     }