指数超出范围。必须是非负数且小于集合的大小。

时间:2017-04-06 12:52:27

标签: c# asp.net

我收到错误(索引超出范围。必须是非负数且小于集合的大小。 GridView_RowUpdating事件中的参数名称:index)。我尝试了一些贴在这里的想法,但仍然遇到了这个错误。

背后的代码

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    Label stu_name= ((Label)GridView1.Rows[e.RowIndex].FindControl("student_Name"));
}

2 个答案:

答案 0 :(得分:0)

虽然编码人员的偏见是让代码产生所需的结果,但如果发生异常则意味着它可以再次出现。

很好地弄清楚所有的数据绑定和查看黑暗魔法,但从一开始就可能在假设中保守一点也是个好主意:

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    var grid = sender as Grid;
    if (grid == null) return;

    var rowIndex = e.RowIndex;
    var rows = grid.Rows;
    if (rowIndex < 0 || rowIndex > rows.Count - 1) return;
    Label stu_name= ((Label) rows[rowIndex].FindControl("student_Name"));
}

答案 1 :(得分:0)

检查是否为GridView1启用了ViewState。

如果禁用ViewState,ASP.NET将无法正确更新,因为ASP.NET可以处理更新或其他任何事件,以保留以前的数据。

如果ViewState == false,GridView1.Rows[e.RowIndex]将失败,因为GridView1.Rows.Count将为0。

此外,如果你在Page_Load中进行DataBind,那么只要确保你是DataBind!IsPostBack。

if(!IsPostBack)
 // DataBind Grid ..