我正在开发数据库应用程序。其中一些列是文本列,其中一列是日期。我想将列的日期与系统日期进行比较,并且要在列的日期值小于系统日期时将单元格背景颜色变为红色。在给定的代码下方,我已尝试但无法正常工作。
private void EMIDGVAdm_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (this.EMIDGVAdm.Columns[e.ColumnIndex].DataPropertyName == "Date_1")
{
var EMIDate = Convert.ToDateTime(EMIDGVAdm.Rows[e.RowIndex].Cells["Date_1"].Value);
if (EMIDate <= DateTime.Now)
{
e.CellStyle.BackColor = Color.Red;
//e.CellStyle.ForeColor = Color.Red;
}
}
}
答案 0 :(得分:1)
如果不需要时间部分,请使用Today
。 try catch
处理日期字段中可能为null的情况。必须在var EMIDate
行中使用gridview列集合名称,该名称可能与DataPropertyName不同。因此,对于您的工作过程中的gridview来说,它们可能是相同的。
分析了OP的项目。似乎该代码不会读取看不见的列,因此不得不加宽DataGridView和面板以显示Date_1列而无需滚动。另外,DataPropertyName没有下划线。调整后的设计和代码作品:
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (this.dataGridView1.Columns[e.ColumnIndex].DataPropertyName == "Date 1")
try
{
var EMIDate = Convert.ToDateTime(dataGridView1.Rows[e.RowIndex].Cells["date1DataGridViewTextBoxColumn"].Value);
if (EMIDate <= DateTime.Today)
{
e.CellStyle.BackColor = Color.Red;
}
}
catch
{
}
}
找到一个似乎被错误命名的文本框。可能textBox6应该是txtEMI6,以便与其他控件的命名保持一致。