ASP.NET GridView行索引非0时上色功能报错求助
解决ASP.NET GridView行颜色设置的错误问题
错误原因分析
你的代码存在两个关键问题:
- 未判断行类型:
RowDataBound事件会触发GridView的所有行(表头、数据行、页脚等),非数据行(如表头)没有业务数据,直接访问Cells会导致索引越界或值不符合预期的错误。 - 单元格索引错误:你访问的
Cells[0]是隐藏的Id_Task列,而非存储状态值的Status列。根据前端代码,Status列是第6个列(索引从0开始计算为5)。
修正后的后台代码
protected void Gridview1_RowDataBound(object sender, GridViewRowEventArgs e) { // 仅处理数据行 if (e.Row.RowType == DataControlRowType.DataRow) { // 方式1:通过列索引获取Status值(注意索引对应关系) string status = e.Row.Cells[5].Text; // 方式2:通过DataItem获取(更可靠,不受列顺序变化影响) // DataRowView rowView = (DataRowView)e.Row.DataItem; // string status = rowView["Status"].ToString(); if (status.Equals("Finished")) { e.Row.BackColor = System.Drawing.Color.DarkGreen; e.Row.ForeColor = System.Drawing.Color.White; } else if (status.Equals("In progress")) { e.Row.BackColor = System.Drawing.Color.DarkOrange; e.Row.ForeColor = System.Drawing.Color.White; } } }
额外说明
- 推荐使用方式2通过
DataItem获取字段值,这样即使后续调整GridView的列顺序,代码也不需要修改,鲁棒性更强。 - 若使用列索引,务必确认列的顺序:前端
Columns集合中,Status是第6个元素(索引5),因为前面依次是Id_Task、Taches a faire、Username、date de requete、deadline。
内容的提问来源于stack exchange,提问作者David Kuepo
相关产品推荐
相关产品推荐

