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

GridView满足条件时行背景色未变红的问题求助

问题排查与解决方案

问题原因分析

  1. 列索引错误:GridView的单元格索引从0开始计数,EXSH列是第4个BoundField(对应索引3),但代码中写了int columnIndex = 4;,导致读取的是无效单元格内容,条件判断永远不触发。
  2. 单元格文本读取不可靠:直接读取e.Row.Cells[columnIndex].Text可能因渲染后的HTML、空格等问题,导致获取的值与数据库实际值不一致。
  3. CSS样式优先级覆盖:GridView的RowStyle-CssClass和AlternatingRowStyle-CssClass中定义的background-color样式优先级可能高于后台代码设置的BackColor,导致背景色不生效。

修复步骤

1. 修正索引并优化取值逻辑

将grdView2_RowDataBound方法修改为直接从数据源读取EXSH字段值,避免索引错误和渲染问题:

protected void grdView2_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        // 直接从绑定的数据源获取值,避免渲染干扰
        DataRowView rowData = (DataRowView)e.Row.DataItem;
        string exshValue = rowData["EXSH"].ToString().Trim();
        
        if (exshValue != "TALLIED")
        {
            // 直接设置背景色
            e.Row.BackColor = System.Drawing.Color.Red;
            // 若CSS覆盖样式,改用内联样式:
            // e.Row.Style.Add("background-color", "red");
        }
    }
}

2. 处理CSS覆盖问题(可选)

如果后台设置被CSS样式覆盖,推荐用自定义CSS类控制:
在页面样式中添加:

.highlight-red {
    background-color: red !important;
}

后台代码替换为:

e.Row.CssClass += " highlight-red";

3. 确认事件绑定有效性

检查GridView标签已正确绑定OnRowDataBound="grdView2_RowDataBound"(你的代码已包含此设置,可跳过)。

测试后,EXSH为EXCESS或SHORTAGE的行背景色会显示为红色,TALLIED的行保持原有样式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 08:50:59