在DataGridView中动态更改单元格颜色

时间:2019-03-10 06:20:25

标签: c# ms-access data-binding datagridview

我正在开发数据库应用程序。其中一些列是文本列,其中一列是日期。我想将列的日期与系统日期进行比较,并且要在列的日期值小于系统日期时将单元格背景颜色变为红色。在给定的代码下方,我已尝试但无法正常工作。

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;
            }
        }
    }

1 个答案:

答案 0 :(得分:1)

如果不需要时间部分,请使用Todaytry 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,以便与其他控件的命名保持一致。