ASP.NET GridView 部分行按单元格值设置背景色不生效问题
问题根因
- 方法调用错误:
Color.FromName()仅支持传入系统预定义的颜色名(如"Pink"、"Blue"),无法解析十六进制格式的色值,你需要用ColorTranslator.FromHtml()方法来解析十六进制色值。 - 色值格式不规范:
U和N对应的两个十六进制色值开头缺失#标识符,就算用对解析方法也会报错。 - 缺行类型判断:现有代码没有过滤表头、表尾、空行等非数据行,极端场景下可能出现索引越界报错。
修正后代码
protected void attn_list_RowDataBound(object sender, GridViewRowEventArgs e) { // 仅处理数据行,过滤表头、表尾等其他行类型 if (e.Row.RowType == DataControlRowType.DataRow) { if (e.Row.Cells[4].Text == "P") { e.Row.BackColor = ColorTranslator.FromHtml("#CCDDCC"); } else if (e.Row.Cells[4].Text == "L") { e.Row.BackColor = ColorTranslator.FromHtml("#C5DAFC"); } else if (e.Row.Cells[4].Text == "E") { e.Row.BackColor = ColorTranslator.FromHtml("#FFCC66"); } else if (e.Row.Cells[4].Text == "U") { // 补全色值前的#标识符 e.Row.BackColor = ColorTranslator.FromHtml("#FFCECE"); } else if (e.Row.Cells[4].Text == "N") { // 补全色值前的#标识符 e.Row.BackColor = ColorTranslator.FromHtml("#EDC9FF"); } if (e.Row.Cells[5].Text == "Yes") { e.Row.Cells[5].ForeColor = Color.Red; } } }
内容的提问来源于stack exchange,提问作者Ken
相关产品推荐
相关产品推荐

