2012-11-15 101 views
0

我有一个gridview,我有就可以了SelectedIndexChanged事件......索引超出范围,但为什么?

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

    //do some stuff 
} 

然后我得到一个错误......

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

我不明白为什么,在GridView被在页面加载绑定。但不是在后回来...

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

你确定错误是在该行上引发的吗? – Arran

+0

你忘了添加一些东西吗?你在哪里得到'IndexOutOfRangeException'? –

+0

你正在做一些*东西*在'/做一些东西吗?并且您没有提及错误发生的位置.. –

回答

3

的asp.net DataSource控制自动处理这个给你,但如果你是手动绑定您的GridView,你还需要绑定它PostBack。如果您基于过滤器等对数据源进行更改,则需要重新绑定它。

+0

我已经试过在postpage上绑定以及,我仍然得到错误:( – Stuart

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

+0

检查帖子回来,帮助。 – San