【问题标题】:Conditionally change row color on GridView有条件地更改 GridView 上的行颜色
【发布时间】:2014-11-25 16:02:13
【问题描述】:

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

当我使用它时,它会将所有行变成灰色,而不是那些没有空值的行。我检查了表的值,它们确实包含空值。 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";
    }
}

【问题讨论】:

  • 1. row["caseClosedDate"] != null 总是满意吗?当您期望 null 时,它可能是一个空字符串。 2. 你正在做的更好的方法是在行上设置一个类,然后在 CSS 中设置颜色。关注点分离...
  • 是的,我已经创建了专门为空但仍显示灰色背景的行。 css 类是否仍需要对列数据进行条件检查?
  • 是的,但是如果将来您想将背景颜色更改为绿色怎么办?您必须更改 C# 代码。这是一个风格问题...
  • 我同意@im1dermike 的观点。设计一直在变化,您不想为此重新编译。考虑到这一点,我更新了我的答案,为您提供两全其美的体验。
  • 谢谢大家,这很有意义。我将更改我的代码。

标签: c# asp.net


【解决方案1】:

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

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 在 cmets 中指出的那样,最好使用 CSS 来实现着色。所以为颜色创建一个新的 CSS 类:

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

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

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

【讨论】:

  • @DaivdG 我想这很明显,但是当我将代码更改为“if(!string.IsNullOrEmpty(e.Row.Cells[6].Text))”时,条件总是得到满足。我检查了我的表格以确保我也检查了正确的列,并且网页上显示了空值/空值,但它仍然会始终将行的背景颜色更改为灰色。我能想到的唯一原因是被检查的值不是空/空,但单元格是空的,数据库将它们存储为空。
  • 也感谢您的帮助,我将答案标记为正确,因为它回答了我原来的问题。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-16
    • 2018-06-19
    • 1970-01-01
    • 2013-08-13
    • 2016-12-12
    • 2018-03-14
    • 1970-01-01
    • 2015-09-14
    相关资源
    最近更新 更多