指数超出范围,但为什么?

时间:2012-11-15 16:43:13

标签: c# asp.net

我有一个gridview,我有一个SelectedIndexChanged事件......

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

    //do some stuff
}

然后我收到错误......

  

指数超出范围。必须是非负数且小于集合的大小。   参数名称:index

我不明白为什么,Gridview被绑定在页面加载中。但不是回帖...

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

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

第二件事:如果您手动将GridView与自定义DataTable,List ....绑定,则必须使用特定的DataKey实现RowCommand。

请查看这篇文章http://aspspirits.blogspot.com/2012/08/how-to-get-rowindex-of-aspnet-gridview.html