我有一个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();
}
答案 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