2012-02-28 118 views
0

我正在使用一個網站,用戶可以從列表中添加和刪除視頻。所有的添加和刪除都是通過複選框完成的。我可以一次添加多個視頻,但是當我嘗試從列表中刪除多個視頻時,它會給我這個錯誤:「索引超出範圍。必須是非負值,並且小於集合。參數名稱:索引「,但是當沒有問題一次刪除一個。另外,當我得到錯誤,並返回檢查視頻消失。索引超出範圍例外

下面是兩個添加和刪除事件的代碼:

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)作爲參考。如果它有幫助,我可以刪除它。

+1

這是太多*和*太少的信息。將代碼減少到確切的失敗並指定語言。 – 2012-02-28 20:34:43

回答

1

我的猜測是,你的問題是發生在btnDeleteVideo_Click方法,因爲你在裏面不斷變化的數據結構(GridView2.Rows)for循環,而在引用它的循環。這在大多數語言中是不好的做法。我的建議是首先使所有選中的行的列表中你的循環,然後做一個一次性多行的刪除,而不是做的每一行刪除。