我正在使用一个网站,用户可以从列表中添加和删除视频。
所有添加和删除都是通过复选框完成的。我可以一次添加多个视频,但是当我试图删除它们的多个在从列表中时,它给了我这个错误:“索引超出范围...”错误
Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index
然而,当没有任何问题,在删除一个一次。另外,当我得到错误,并返回检查视频消失。
这是在C#ASP.NET中,我不知道错误在哪里,但我相信它是在btnDeleteVideo_Click
事件。如果需要,我将显示其他事件(btnAddVideo_Click)作为参考。如果它有帮助,我可以删除它。我是新来的stackoverflow,所以我很抱歉,如果这是太多或太少的信息。
下面是两个添加和删除事件的代码:
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();
}
}
}
是不是因为所有的后者的指数变化后的检查框第一个被删除,然后再次,然后再次。 – ediblecode 2012-02-29 17:14:07
我会添加一些调试信息,以查看代码失败的确切位置。我猜'gvr。RowIndex'有时是负面的,所以也许你应该打印出来(或者一步步穿过它) – sebagomez 2012-02-29 17:14:10
感谢您清除问题,我不知道该怎么做,我为此道歉。 – Peter 2012-02-29 17:31:12