日期:2014-05-18  浏览次数:20477 次

GRIDVIEW控件删除出错
删除前几个没事删除后几个就出错

索引超出范围。必须为非负值并小于集合大小
参数名: index 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

异常详细信息: System.ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。
参数名: index

源错误: 


行 26: protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
行 27: {
行 28: Label ID = GridView1.Rows[e.RowIndex].Cells[1].FindControl("Label1") as Label;//报错行
行 29: string SqlTxt = "DELETE FROM ClassList WHERE ClassID='" + ID.Text + "'";
行 30: iDal.GetSqlCmd(SqlTxt);
 
大小。

------解决方案--------------------
建议你的id不要这样弄,gridview里面有将数据库表的主键字段和gridview的datakeynames属性绑定
这样你在删除的时候就可以使用GridView1.DataKeys[row.RowIndex].Value.ToString(); 

并且删除完后请你重新绑定到新的数据源!
------解决方案--------------------
我以前也报过同样的错误 但忘记怎么解决的去了 复习一下
------解决方案--------------------
gridview的datakeynames属性与主建绑定,
GridView1.DataKeys[row.RowIndex].Value.ToString(); 
别忘记调用databind()
------解决方案--------------------

 Label name = ((Label )(this.GridView1.Rows[e.RowIndex].Cells[1].FindControl("Label1") )).Text.ToString();

如果是主键直接
 this.GridView1.DataKeys[e.RowIndex][0].ToString();