在我在利用DATAGRID表里的删除命令时  提示错误如下
索引超出范围。必须为非负值并小于集合大小。参数名: index 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。参数名: index源错误: 
行 259:        MyCommand = New SqlCommand(DeleteCmd, MyConnection)
行 260:        MyCommand.Parameters.Add(New SqlParameter("@sno", SqlDbType.VarChar, 11))
行 261:        MyCommand.Parameters("@sno").Value = datagrid1.DataKeys(CInt(e.Item.ItemIndex))
行 262:
行 263:        MyCommand.Connection.Open()
 我已经郁闷了半天了   谢谢各位高手的详解   菜鸟不胜感激

解决方案 »

  1.   

    DATAGRID.DataKeyField 是设置的库里面的唯一字段吗?
    在删除操作结束后在绑定一下DATAGRID,试试
      

  2.   

    碰到过,我的是因为使用了分页,当你把一页的最后一条数据删了就是这个错误,因为DataGrid无法自动转到上一页去,所以在删除的时候得加个判断。
    if (user.GetBooksCountInStow(cardID) <= ListView.CurrentPageIndex * ListView.PageSize && user.GetBooksCountInStow(cardID) > 0)
    {
    ListView.CurrentPageIndex--;
    }
    BindData();
    当然我使用的是自定义分页,自动分页我不知道会不会报这个错。
      

  3.   

    //分页
    private void DataGrid_Index_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
    {
    DataGrid_Index.CurrentPageIndex=e.NewPageIndex;
    //在这里重新绑定一次
    }
      

  4.   

    MyDG.DataKeyField = "字段名"
      

  5.   

    DataGrid.DataKeyField = "字段名"