GridView满足条件时行背景色未变红的问题求助
问题排查与解决方案
问题原因分析
- 列索引错误:GridView的单元格索引从0开始计数,EXSH列是第4个BoundField(对应索引3),但代码中写了
int columnIndex = 4;,导致读取的是无效单元格内容,条件判断永远不触发。 - 单元格文本读取不可靠:直接读取
e.Row.Cells[columnIndex].Text可能因渲染后的HTML、空格等问题,导致获取的值与数据库实际值不一致。 - 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
相关产品推荐
相关产品推荐

