我正在使用一個網站,用戶可以從列表中添加和刪除視頻。
所有添加和刪除都是通過複選框完成的。我可以一次添加多個視頻,但是當我試圖刪除它們的多個在從列表中時,它給了我這個錯誤:「索引超出範圍...」錯誤
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