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

ASP.NET GridView行索引非0时上色功能报错求助

解决ASP.NET GridView行颜色设置的错误问题

错误原因分析

你的代码存在两个关键问题:

  1. 未判断行类型:RowDataBound事件会触发GridView的所有行(表头、数据行、页脚等),非数据行(如表头)没有业务数据,直接访问Cells会导致索引越界或值不符合预期的错误。
  2. 单元格索引错误:你访问的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 04:55:19