我正在开发一个网站,用户可以在列表中添加和删除视频。所有添加和删除都使用复选框完成。我可以一次添加多个视频,但是当我尝试从列表中删除多个视频时,它会给我这个错误:“索引超出范围。必须是非负数且小于参数名称:index“但是当一次删除一个没有问题时。此外,当我收到错误并返回时,已检查的视频已消失。
以下是添加和删除事件的代码:
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_Click事件中。如果需要,我将显示另一个事件(btnAddVideo_Click)作为参考。我可以删除它,如果它会有所帮助。
答案 0 :(得分:1)
我的猜测是你的问题发生在btnDeleteVideo_Click方法中,因为你正在for循环中更改数据结构(GridView2.Rows),同时在for循环中引用它。这在大多数语言中都是不好的做法。我的建议是首先列出for循环中所有已检查的行,然后一次性删除多行,而不是每行删除。