有条理地在GridView上更改行颜色

时间:2014-11-25 16:02:14

标签: c# asp.net

我正在尝试根据网页上行内单元格的值更改表格行的背景颜色。基本上,我想通过查看存储在表上的值是否为空来检查案例是否已关闭。如果表格上存有日期,我希望该行变为灰色。

当我使用它时,它会将所有行变为灰色而不是没有空值的行。我检查了表的值,它们确实包含空值。存储在caseClosedDate列中的值是数据类型日期。

protected void CaseList_OnRowDataBound(object sender, GridViewRowEventArgs e)
{
    //table is generated through a stored procedure
    DataTable dt = mytable;

    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        foreach (DataRow row in dt.Rows)
        {
            //uses the column string name
            if(row["caseClosedDate"] != null)
            {
                e.Row.BackColor = Color.Gray;
            }
        }
    }
}

编辑 如果其他人在if语句中遇到类似问题,则该表使用“& nbsp;”填充空值。 最终答案是:

.case-closed { background-color:gray; }

}

protected void CaseList_OnRowDataBound(object sender, GridViewRowEventArgs e)
{
    //table is generated through a stored procedure
    DataTable dt = mytable;

    if (e.Row.Cells[6].Text.Trim() != " ")
    {
        e.Row.CssClass = "case-closed";
    }
}

2 个答案:

答案 0 :(得分:0)

您不需要循环遍历表,行中单元格的值将在偶数参数中提供给您。

if (e.Row.RowType == DataControlRowType.DataRow)
{
    //Change the number here to refer to the column you are checking
    if(string.IsNullOrEmpty(e.Row.Cells[1].Text))
    {
        e.Row.BackColor = Color.Gray;
    }
}

然而,正如@ im1dermike在评论中指出的那样,使用CSS来实现着色更为可取。因此,为颜色创建一个新的CSS类:

.case-closed { background-color: gray; }

而不是在代码中设置颜色,只需设置CSS类:

e.Row.CssClass = "case-closed";

答案 1 :(得分:0)

如果要将数据绑定到gridview,请在OnRowDataBound事件中使用它。

if (DataBinder.Eval(e.Row.DataItem, "caseClosedDated") != null)
{
    e.Row.BackColor = Color.Gray;                
}