索引超出范围异常

本文关键字:异常 范围 索引 | 更新日期: 2023-09-27 18:26:16

我正在开发一个网站,用户可以从列表中添加和删除视频。所有添加和删除操作都使用复选框完成。我可以一次添加多个视频,但当我试图一次从列表中删除多个视频时,会出现以下错误:"索引超出范围。必须是非负的,并且小于集合的大小。参数名称:索引",但如果一次删除一个视频没有问题。此外,当我得到错误并返回时,检查的视频都不见了。

以下是添加和删除事件的代码:

protected void btnAddVideo_Click(object sender, EventArgs e)
{
    foreach (GridViewRow gvr in GridView3.Rows)
    {
        CheckBox chkItem = (CheckBox)gvr.FindControl("cbAdd");
        if (chkItem.Checked)
        {
            String sRecID = GridView3.DataKeys[gvr.RowIndex].Value.ToString();
            Session["videorecid"] = sRecID;
            SqlDataSource2.Insert();
            SqlDataSource2.SelectCommand = "SELECT * FROM dealervideo inner join videos on videos.RecID = dealervideo.VideoRecID inner join dealers on dealers.RecID = dealervideo.DealerRecID where dealers.RecID = " + hidRecID.Value;
            GridView2.DataBind();
        }
    }
    GridView2.DataBind();
}
protected void btnDeleteVideo_Click(object sender, EventArgs e)
{
    foreach (GridViewRow gvr in GridView2.Rows)
    {
        CheckBox chkItem = (CheckBox)gvr.FindControl("cbDelete");
        if (chkItem.Checked)
        {
            String sRecID = GridView2.DataKeys[gvr.RowIndex].Value.ToString();
            Session["videorecid"] = sRecID;
            SqlDataSource2.Delete();
            SqlDataSource2.SelectCommand = "SELECT * FROM dealervideo inner join videos on videos.RecID = dealervideo.VideoRecID inner join dealers on dealers.RecID = dealervideo.DealerRecID where dealers.RecID = " + hidRecID.Value;
            GridView2.DataBind();
        }
    }
}

我是stackoverflow的新手,所以如果这是太多或太少的信息,我很抱歉。

编辑:这是在C#ASP.NET中,我不确定错误在哪里,但我相信它在btnDelteVideo_Click事件中。如果需要,我将显示另一个事件(btAddVideo_Click)作为参考。如果有帮助的话,我可以把它去掉。

索引超出范围异常

我的猜测是,您的问题发生在btnDelteVideo_Click方法中,因为您在for循环中引用数据结构(GridView2.Rows)时,正在更改for循环中的数据结构。这在大多数语言中都是不好的做法。我的建议是,首先列出for循环中所有选中的行,然后一次删除多行,而不是每行都删除。