C# 索引超出范围,但为什么?

C# 索引超出范围,但为什么?,c#,asp.net,C#,Asp.net,我有一个gridview,上面有一个SelectedIndexChanged事件 protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) { GridViewRow Row = GridView1.SelectedRow; //do some stuff } 然后我得到一个错误 索引超出范围。必须为非负数且小于集合的大小。 参数名称:索引 我不明白为什么Gridview被绑定在page

我有一个gridview,上面有一个
SelectedIndexChanged
事件

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
    GridViewRow Row = GridView1.SelectedRow;

    //do some stuff
}
然后我得到一个错误

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

我不明白为什么Gridview被绑定在pageload中。但不是在邮政回来

if (!IsPostBack)
{
    GridView1.DataSource = UserAccounts;
    GridView1.DataBind();
}

asp.net
数据源
控件会自动为您处理此问题,但如果您手动绑定
GridView
,则还需要在
回发
时绑定它。如果您根据过滤器等对数据源进行更改,则需要重新绑定。

asp.net
数据源
控件会自动为您处理此操作,但如果您手动绑定
GridView
,则还需要在
回发
时对其进行绑定。如果您根据过滤器等对数据源进行更改,则需要重新绑定它。

第一件事:回发到服务器时,您的GridView1将重新初始化,以便GridView1.DataSource将丢失以前的数据

if (!IsPostBack)
{
        GridView1.DataSource = UserAccounts;
        GridView1.DataBind();
}
第二件事:如果手动将GridView与自定义DataTable绑定,请列出。。。。您必须使用特定的数据键实现RowCommand


请看这篇文章

第一件事:回发到服务器时,您的GridView1将重新初始化,这样GridView1.DataSource将丢失以前的数据

if (!IsPostBack)
{
        GridView1.DataSource = UserAccounts;
        GridView1.DataBind();
}
第二件事:如果手动将GridView与自定义DataTable绑定,请列出。。。。您必须使用特定的数据键实现RowCommand


请看一看这篇文章

您确定该行出现了错误吗?您是否忘记添加一些内容?您从哪里获得
索引自动失效异常
?您是否在
//做一些事情
?而且您没有提到错误的抛出位置。.使用
SelectedRow
,与从
Rows
集合(
GridView1.Rows[GridView1.SelectedIndex]
中检索
SelectedIndex
属性指定的索引处的
GridViewRow
对象相同。如果未选择任何行,则
SelectedIndex
为-1,这将引发异常。那么,您是否已调试以查看是否存在项以及索引是否大于-1?Microsoft说
SelectedRow
GridView1.Rows[GridView1.SelectedIndex]
相同,但这并不完全正确。使用反编译器并查看
SelectedRow
SelectedIndex
表明,如果SelectedRow为-1,则返回的对象为
null
SelectedRow
永远不会抛出异常,SelectedIndex也不会抛出异常(除非将
SelectedIndex
设置为值<-1,在这种情况下,它将抛出
ArgumentOutOfRangeException
)。异常必须发生在另一行上。您确定在该行上引发了错误吗?您是否忘记添加一些内容?您从哪里获得
索引自动失效异常
?您是否在
//做一些事情
?而且您没有提到错误的抛出位置。.使用
SelectedRow
,与从
Rows
集合(
GridView1.Rows[GridView1.SelectedIndex]
中检索
SelectedIndex
属性指定的索引处的
GridViewRow
对象相同。如果未选择任何行,则
SelectedIndex
为-1,这将引发异常。那么,您是否已调试以查看是否存在项以及索引是否大于-1?Microsoft说
SelectedRow
GridView1.Rows[GridView1.SelectedIndex]
相同,但这并不完全正确。使用反编译器并查看
SelectedRow
SelectedIndex
表明,如果SelectedRow为-1,则返回的对象为
null
SelectedRow
永远不会抛出异常,SelectedIndex也不会抛出异常(除非将
SelectedIndex
设置为值<-1,在这种情况下,它将抛出
ArgumentOutOfRangeException
)。异常必须发生在不同的行上。我也尝试过在postpage上绑定,但仍然出现错误:(我也尝试过在postpage上绑定,但仍然出现错误:(检查回帖子,帮助。检查回帖子,帮助)。