有条件地更改网格视图上的行颜色

本文关键字:颜色 视图 网格 有条件 | 更新日期: 2023-09-27 18:32:00

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

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

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 语句有类似的问题,该表会用" "填充空值。最终答案是:

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

有条件地更改网格视图上的行颜色

您不需要遍历表格,行中单元格的值在偶数参数中给出给您。

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

如果要将数据绑定到网格视图,请在 OnRowDataBound 事件中使用此选项。

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