You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET C#中如何根据日期修改GridView行颜色?代码无效求助

GridView行背景颜色设置失效的排查与修复

核心逻辑错误修正

你的代码逻辑和需求完全相反:
需求是「到期日晚于系统当前日期(date > today)时,行背景设为PaleVioletRed」,但现有代码判断的是today > date(当前日期晚于到期日)时设置该颜色,这是导致效果不符合预期的核心问题。

修正后的逻辑代码:

if(e.Row.RowType == DataControlRowType.DataRow)
{
    DateTime date;
    // 先验证单元格文本能否正常转为DateTime,避免转换报错
    if(DateTime.TryParse(e.Row.Cells[5].Text, out date))
    {
        DateTime today = DateTime.Today; // 用DateTime.Today只取日期部分,避免时分秒干扰判断
        if(date > today) // 到期日晚于当前日期,符合需求的高亮条件
        {
            e.Row.BackColor = System.Drawing.Color.PaleVioletRed;
        }
        else
        {
            e.Row.BackColor = System.Drawing.Color.PaleGreen;
        }
    }
    else
    {
        // 处理日期转换失败的情况,比如单元格为空或格式错误
        e.Row.BackColor = System.Drawing.Color.LightGray; // 可选:标记异常行
    }
}

其他可能的失效原因及解决

  • 未绑定RowDataBound事件:确保GridView在后台代码或ASPX页面中绑定了RowDataBound事件,比如ASPX页面需添加OnRowDataBound="GridView_RowDataBound",后台方法名要与事件绑定的名称一致。
  • 单元格文本包含HTML标签:如果第6列是模板列(比如嵌套Label控件),直接取Cells[5].Text可能拿到HTML代码而非纯日期文本,此时应通过DataItem获取原始数据:
    // 假设数据源是DataTable,字段名为ExpireDate
    DataRowView rowView = (DataRowView)e.Row.DataItem;
    DateTime date = Convert.ToDateTime(rowView["ExpireDate"]);
    
  • 样式被主题或CSS覆盖:检查是否有GridView的主题样式、行的CSS类优先级高于BackColor设置,可尝试用e.Row.Style["background-color"] = "#DB7093";(PaleVioletRed的十六进制值)强制覆盖样式。
  • 时间精度干扰:如果到期日包含时分秒,DateTime.Now会带具体时间,可能导致判断偏差,改用DateTime.Today只比较日期部分更合理。

内容的提问来源于stack exchange,提问作者Tobi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 15:52:11