【问题标题】:index was out of range in asp.net gridview索引超出了 asp.net gridview 的范围
【发布时间】:2017-03-10 06:24:52
【问题描述】:

我正在创建一个 web 应用程序,其中我有一个 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;
                }

            }
        }

但页面显示错误

索引超出范围。必须是非负数且小于 集合。参数名称:索引

描述:执行过程中发生了未处理的异常 当前的网络请求。请查看堆栈跟踪以获取更多信息 有关错误的信息以及它在代码中的来源。

异常详细信息:System.ArgumentOutOfRangeException:索引已出 的范围。必须是非负数且小于 收藏。参数名称:索引

在这条线上

第 329 行:文件上传 fp = (FileUpload)dgvEdit.Rows[dgvEdit.EditIndex].FindControl("fpTask");

下面的代码有什么问题

【问题讨论】:

  • dgvEdit.EditIndex的值是多少
  • 其实我不知道如何找到gridview的值

标签: c# asp.net gridview


【解决方案1】:

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

您可以使用类似的条件

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;
                }

            }

注意:使用PreRender 事件在服务器控件呈现到页面之前执行任何更新。在此事件期间,可以保存服务器控件的视图状态的任何更改。在渲染阶段所做的此类更改将不会被保存。

我认为您应该为此使用 RowDataBound

【讨论】:

    猜你喜欢
    • 2013-02-26
    • 1970-01-01
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多