Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 索引超出范围。必须为非负数且小于集合的大小。_C#_Asp.net - Fatal编程技术网

C# 索引超出范围。必须为非负数且小于集合的大小。

C# 索引超出范围。必须为非负数且小于集合的大小。,c#,asp.net,C#,Asp.net,我收到错误(索引超出范围。必须为非负且小于集合的大小)。 GridView\u行更新事件中的参数名称(索引)。我尝试了一些张贴在这里的想法,但仍然得到这个错误 代码隐藏 protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) { Label stu_name= ((Label)GridView1.Rows[e.RowIndex].FindControl("student_Name"));

我收到错误(索引超出范围。必须为非负且小于集合的大小)。 GridView\u行更新事件中的参数名称(索引)。我尝试了一些张贴在这里的想法,但仍然得到这个错误

代码隐藏

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

虽然编码器的偏见是让代码产生期望的结果,但如果发生异常,则意味着它可能再次发生

很好地理解了所有数据绑定和viewstate暗魔法,但从一开始就在假设方面稍微保守一点可能也是个好主意:

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"));
}
受保护的无效GridView1\u行更新(对象发送方,GridViewUpdateEventArgs e)
{
var grid=发送方作为网格;
if(grid==null)返回;
var rowIndex=e.rowIndex;
var rows=grid.rows;
if(rowIndex<0 | | rowIndex>rows.Count-1)返回;
Label stu_name=((Label)行[rowIndex].FindControl(“学生名”);
}

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

很好地理解了所有数据绑定和viewstate暗魔法,但从一开始就在假设方面稍微保守一点可能也是个好主意:

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"));
}
受保护的无效GridView1\u行更新(对象发送方,GridViewUpdateEventArgs e)
{
var grid=发送方作为网格;
if(grid==null)返回;
var rowIndex=e.rowIndex;
var rows=grid.rows;
if(rowIndex<0 | | rowIndex>rows.Count-1)返回;
Label stu_name=((Label)行[rowIndex].FindControl(“学生名”);
}

检查是否为GridView1启用了ViewState

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

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

另外,如果您在页面加载中进行数据绑定,那么请确保仅在以下情况下进行数据绑定!我回来了

if(!IsPostBack)
 // DataBind Grid ..

检查是否为GridView1启用了ViewState

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

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

另外,如果您在页面加载中进行数据绑定,那么请确保仅在以下情况下进行数据绑定!我回来了

if(!IsPostBack)
 // DataBind Grid ..

尝试调试。可能是
-1
,当未选择任何行时。它正确显示行索引(e.rowindex)在调试“GridView1.Rows.Count”和“e.rowindex”时添加监视,并共享两个表达式的结果以调查问题。ohhh。。它显示GridView1.Rows.Count为0,e.RowIndex为1(选定的行索引)。是否为GridView1控件启用了ViewState?否则,ASP.NET将无法在GridView上正常运行更新。请尝试调试。可能是
-1
,当未选择任何行时。它正确显示行索引(e.rowindex)在调试“GridView1.Rows.Count”和“e.rowindex”时添加监视,并共享两个表达式的结果以调查问题。ohhh。。它显示GridView1.Rows.Count为0,e.RowIndex为1(选定的行索引)。是否为GridView1控件启用了ViewState?如果没有,ASP.NET将无法在GridView上正常运行更新。刚才我注意到,Rowediting事件触发两次,第一次显示网格。但第二次显示EmptyDataTemplate文本OK。确保每次回发时不绑定数据。检查一下!我刚才注意到,行编辑事件触发了两次,第一次显示网格,但第二次显示EmptyDataTemplate文本OK。确保每次回发时不绑定数据。检查一下!在数据绑定之前返回IsPostBack。