GridView RowDataBound事件设置背景色无效问题求助
解决ASP.NET GridView行背景色不生效的问题
问题根源在于你添加样式时使用了.NET服务器端的属性名BackColor,而HTML/CSS只识别标准CSS属性名,浏览器无法解析BackColor这个非标准属性——即便页面源码里显示了该样式,也不会生效。
直接修改方案:替换为CSS标准属性名
将代码中的BackColor替换为background-color(或驼峰式的backgroundColor,两种写法浏览器均支持):
修改后的后台代码:
protected void Gridview_OnRowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { if (e.Row.Cells[1].Text == "0") { // 替换为CSS标准属性名 e.Row.Style.Add("background-color", "yellow"); } TextBox txbx = e.Row.FindControl("Txt_Criteria") as TextBox; // 同样替换属性名 txbx.Style.Add("background-color", "yellow"); } }
修改后,页面源码中的样式会变成符合CSS规范的background-color:yellow;,浏览器就能正确渲染背景色。
更优方案:使用CSS类(推荐)
如果需要复用样式或更易于维护,建议定义CSS类后动态添加到控件上:
- 在页面
<head>中添加CSS类:
<style> .highlight-row { background-color: yellow; } .highlight-input { background-color: yellow; } </style>
- 修改后台代码,添加CSS类而非直接写内联样式:
protected void Gridview_OnRowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { if (e.Row.Cells[1].Text == "0") { // 给行添加高亮类,若需保留原有类则用 += " highlight-row" e.Row.CssClass = "highlight-row"; } TextBox txbx = e.Row.FindControl("Txt_Criteria") as TextBox; // 给输入框添加高亮类 txbx.CssClass = "highlight-input"; } }
这种方式更符合前端开发规范,后续调整样式时无需修改后台代码。
内容的提问来源于stack exchange,提问作者Barnabeck
相关产品推荐
相关产品推荐

