2014-03-27 35 views
0

我嘗試使用下面的代碼添加在GridView的項目,但它拋出異常:將項目添加到網格視圖:索引超出範圍例外

An exception of type 'System.ArgumentOutOfRangeException' occurred in 'mscorlib.dll' but was not handled in user code 
Additional information: Index was out of range. Must be non-negative and less than the size of the collection. 

這裏是我的代碼:

protected void GridViewProduct_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    if (e.CommandName == "AddToCart") 
    { 
     int RowClicked = Convert.ToInt32(e.CommandArgument); 
     int ProductID = Convert.ToInt32(GridViewProduct.DataKeys[RowClicked].Value); 
     List<int> ProductsInCart = (List<int>)Session["Cart"]; 
     if (ProductsInCart == null) 
     { 
      ProductsInCart = new List<int>(); 
     } 
     ProductsInCart.Add(ProductID); 
     Session["Cart"] = ProductsInCart; 
    } 
} 
+1

哪一行會引發異常? – Dmitry

+0

GridViewProduct.DataKeys [RowClicked]在該行中顯示可疑。你有沒有檢查過DataKeys是什麼,以及rowclicked有什麼? – TYY

+0

int ProductID = Convert.ToInt32(GridViewProduct.DataKeys [RowClicked] .Value); 在此行收到異常! – user3470196

回答

0

哪一行引發此異常?在轉換爲列表之前,您應該檢查並確保Session [「Cart」]不爲空。有很多原因可能導致你失去會話對象。還要確保RowClicked不爲空,因爲這也會導致異常。 在此事件的開始處設置一個斷點(if(e.CommandName ==「AddToCart」)),然後遍歷並檢查每行代碼以獲取空引用。 舉例:

if(Session["Cart"] != null) 
    { 
    // Then cast to list 
    } 
+0

它拋出的異常在 int ProductID = Convert.ToInt32(GridViewProduct.DataKeys [RowClicked] .Value); – user3470196

+0

請幫幫我!我無法完成! – user3470196

+0

您提到DataKeys的計數爲0.如果沒有DataKeys,則不能引用DataKeys的索引。我會發現爲什麼DataKeys是空的。如果沒有看到更多的程序或知道你想要做什麼,我不能提供更多的幫助。 – Ageonix