在cellformatting中为null值

时间:2015-10-12 20:57:53

标签: c# sql-server winforms cell-formatting

我有一个名为dgMember_Grade的数据网格,它从存储过程中获取数据。

其中一列代表名为vacationStart的日期。

我想根据单元格值对行进行着色,但它在foreach行上给出了错误:

  

无法将'char'类型转换为'System.Windows.Forms.DataGridViewCell'

我尝试了代码:

 foreach (DataGridViewRow Myrow in dgMember_Grade.Rows)
        {
            foreach (DataGridViewCell cell in Myrow.Cells[26].Value.ToString()) // error on foreach 
            {
                if (cell != null)
                {
                    DateTime date = DateTime.Now;
                    DateTime expiredate = DateTime.Parse(Myrow.Cells[26].Value.ToString());

                    if (expiredate < date) 
                    {
                        Myrow.DefaultCellStyle.BackColor = Color.Red;
                    }
                    else
                    {
                        Myrow.DefaultCellStyle.BackColor = Color.Green;
                    }
                }
            }

        }

2 个答案:

答案 0 :(得分:1)

如果您已经知道单元格的索引。 也许你正试图这样做:

foreach (DataGridViewRow Myrow in dgMember_Grade.Rows)
{
    if (Myrow.Cells[26].Value == null) {
        continue;
    }

    DateTime expiredate = DateTime.Parse(Myrow.Cells[26].Value.ToString());
    if (expiredate < DateTime.Now) 
    {
        Myrow.DefaultCellStyle.BackColor = Color.Red;
    }
    else
    {
        Myrow.DefaultCellStyle.BackColor = Color.Green;
    }
}

答案 1 :(得分:1)

以下是您可以使用的代码:

foreach (DataGridViewRow Myrow in dgMember_Grade.Rows)
{
    var cellValue = Myrow.Cells[26].Value;
    if (cellValue == null || cellValue == DBNull.Value)
        continue;

    DateTime expiredate = Convert.ToDateTime(cellValue);
    if (expiredate < DateTime.Now)
    {
        Myrow.DefaultCellStyle.BackColor = Color.Red;
    }
    else
    {
        Myrow.DefaultCellStyle.BackColor = Color.Green;
    }
}

注意:

  • 您不需要2个循环,您只需使用Rows之间的循环并根据Myrow.Cells[26].Value
  • 应用您需要的循环
  • 您可以使用CellFormattingCellPaintingRowPrePaint等事件来应用格式。