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();
}
4

2 回答 2

3

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

于 2012-11-15T16:48:11.690 回答
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

于 2012-11-15T16:54:58.603 回答