2017-03-10 39 views
0

我创建一个Web应用程序中,我有一个GridView和预渲染的方法,我有以下代码指数超出范围在asp.net的GridView

protected void dgvEdit_PreRender(object sender, EventArgs e) 
     { 
      if (this.dgvEdit.EditIndex != -1) 
      { 
       FileUpload fp = (FileUpload)dgvEdit.Rows[dgvEdit.EditIndex].FindControl("fpTask"); 
       if (fp != null) 
       { 
        // You can apply condition here 
        fp.Enabled = true; 
       } 

      } 
     } 

但页面显示我错误

索引超出范围。必须是非负的并且小于 的大小。参数名称:index

描述:在执行 期间发生未处理的异常当前Web请求。请查看堆栈跟踪以获取有关该错误的更多信息以及源代码的位置。

异常详细信息:System.ArgumentOutOfRangeException:索引出了 范围。必须是非负值且小于 系列的尺寸。参数名称:索引

在这条线

线329:文件上传FP = (文件上传)dgvEdit.Rows [dgvEdit.EditIndex] .FindControl( “fpTask”);

什么是错用下面的代码

+0

'dgvEdit.EditIndex' –

+0

的值是什么其实我不知道如何找到gridview的值 –

回答

0

背后显示此错误的原因是Line No 329dgvEdit.Rows.Count<dgvEdit.EditIndex

您可以使用条件像

if (this.dgvEdit.EditIndex != -1 && dgvEdit.Rows.Count>=dgvEdit.EditIndex) 
      { 
       FileUpload fp = (FileUpload)dgvEdit.Rows[dgvEdit.EditIndex].FindControl("fpTask"); 
       if (fp != null) 
       { 
        // You can apply condition here 
        fp.Enabled = true; 
       } 

      } 

N.B:使用PreRender事件之前服务器控件呈现页面进行任何更新。在此事件期间,可以保存服务器控件的视图状态中的任何更改。渲染阶段所做的这些更改不会被保存。

我认为你应该使用RowDataBound这个。