2017-04-06 144 views
1

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

代码隐藏

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

尝试调试。可能它是'-1',当没有行被选中时。 –

+0

它正确显示rowindex(e.RowIndex) – user7415073

+0

在'GridView1.Rows.Count'和'e.RowIndex'的调试期间添加监视并共享两个表达式的结果以调查问题。 –

回答

0

虽然编码器的偏见是让代码产生期望的结果,如果发生异常就意味着它会再次出现。如果视图状态GridView1启用

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")); 
} 
0

检查:

大弄清楚所有的数据绑定和ViewState的黑暗魔法,但可能也是一个好主意,更保守一点从一开始就假设。

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

在情况下,ViewState的==假的,GridView1.Rows[e.RowIndex],将失败,因为GridView1.Rows.Count将为0

此外,如果你是在Page_Load中做的DataBind,然后确保你的数据绑定只有!的IsPostBack。

if(!IsPostBack) 
// DataBind Grid .. 
+0

刚刚我注意到,Rowediting事件触发两次,第一次显示grid.but在第二次显示EmptyDataTemplate文本 – user7415073

+0

好的。确保你在每个PostBack上不要绑定数据。在DataBind之前检查!IsPostBack。 – Habeeb

相关问题