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

如何根据HeaderName动态设置GridView列的Textmode?遇索引越界错误

解决GridView设置列样式时的"索引超出范围"错误

你遇到的这个错误,核心问题是循环逻辑搞混了行数和列数!咱们来拆解下问题:

你的代码里用for (int i = 0; i < dg.Rows.Count; i++)遍历的是GridView的行数,但循环内部却用i去访问dg.HeaderRow.Cells[i]——HeaderRow的Cells数量是列的总数,当你的行数大于列数时,i就会超出HeaderRow.Cells的索引范围,自然就触发"参数超出有效值范围"的报错了。

修正后的代码

我们应该先找到目标列的索引(遍历表头的列),再批量处理所有数据行的对应列:

GridView dg = new GridView();
dg.DataSource = dsInput.Tables[0];
dg.DataBind();

// 第一步:先定位目标列的索引(遍历表头的列,而非数据行)
int targetColumnIndex = -1;
for (int colIndex = 0; colIndex < dg.HeaderRow.Cells.Count; colIndex++)
{
    if (dg.HeaderRow.Cells[colIndex].Text == "CPR or Medical Card No.")
    {
        targetColumnIndex = colIndex;
        break; // 找到目标列后直接退出循环,提升效率
    }
}

// 第二步:确认找到目标列后,遍历所有数据行设置样式
if (targetColumnIndex != -1)
{
    foreach (GridViewRow row in dg.Rows)
    {
        // 只处理数据行,避免误操作表头/分页行等非数据行
        if (row.RowType == DataControlRowType.DataRow)
        {
            row.Cells[targetColumnIndex].Attributes.Add("class", "textmode");
        }
    }
}

额外注意事项

  • 一定要加targetColumnIndex != -1的判断,防止因为找不到目标列导致后续操作再次报错
  • 增加row.RowType == DataControlRowType.DataRow的判断,避免误修改表头、分页条或脚注行的样式
  • 原代码里每次循环行都重新读取表头文本,这种重复操作完全没必要,先一次性定位列索引再处理更高效

内容的提问来源于stack exchange,提问作者Nilesh Godse

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:55:23