根据列日期更改DataGridView中的行颜色
问题描述:
我有一个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;
}
}
答
做它在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;
}
}
答
可以使用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;
}
}
答
我把代码放在错误的地方。我已经把下面的代码为另一种形式的源代码(表单输入信息到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;
}
}
红色和蓝色的颜色没有出现? –
Dint你的代码输出任何错误? –
@JonesJoseph既不显示颜色,也不显示错误 – Sanaa