C# 索引超出范围异常
我在一个网站上工作,用户可以从列表中添加和删除视频。所有的添加和删除都是通过复选框完成的。我可以一次添加多个视频,但当我尝试一次从列表中删除多个视频时,会出现以下错误:“索引超出范围。必须为非负数且小于集合的大小。参数名称:Index”。但是,如果没有问题,则一次删除一个视频。当我得到错误并返回时,检查过的视频也消失了 以下是添加和删除事件的代码:C# 索引超出范围异常,c#,asp.net,C#,Asp.net,我在一个网站上工作,用户可以从列表中添加和删除视频。所有的添加和删除都是通过复选框完成的。我可以一次添加多个视频,但当我尝试一次从列表中删除多个视频时,会出现以下错误:“索引超出范围。必须为非负数且小于集合的大小。参数名称:Index”。但是,如果没有问题,则一次删除一个视频。当我得到错误并返回时,检查过的视频也消失了 以下是添加和删除事件的代码: protected void btnAddVideo_Click(object sender, EventArgs e) { foreach
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中,我不确定错误在哪里,但我相信它是在btnDeleteVideo#u Click事件中。如果需要,我将显示其他事件(btnAddVideo_单击)作为参考。如果有帮助的话,我可以删除它。我猜您的问题发生在btnDeleteVideo\u Click方法中,因为您在for循环中引用for循环时正在更改for循环中的数据结构(GridView2.Rows)。这在大多数语言中都是不好的做法。我的建议是,首先列出for循环中所有选中的行,然后一次性删除多行,而不是删除每行。信息太多也太少。将代码减少到完全失败的程度,并指定语言。