2011-05-16 40 views
0

我一直在解決這個問題幾天了。獲取網格視圖以在C中選擇一行時出現問題#

背景:我有一個購物車設置,它存儲在會話中。我將它從會話中拉出並將其綁定到網格視圖。我希望用戶能夠更改項目的數量。我遇到了幾個問題,這個問題只是沒有解決問題。

我在命令名爲「Select」的每一行都有一個按鈕。當你點擊那個按鈕時,它會彈出一個帶有文本框的模式彈出窗口。

但是,當我點擊按鈕的SelectedValue是-1,它會拋出一個超出範圍異常。

它應該是項目的ProductId。 DataKey名稱是產品ID,當我在網格視圖中顯示產品ID時,它顯示爲正確的非-1 ID。

protected void btnChange_Click(object sender, EventArgs e) 
{ 
    Dictionary<int, ShoppingCartItem> cart = (Dictionary<int, ShoppingCartItem>)Session["Cart"]; 


    cart[(int)gvCart0.SelectedValue].Quantity = int.Parse(tbQuantity.Text); 
    gvCart0.DataBind(); 
} 

回答

0

注意 ::請改變你的按鈕CommandName"selectCart"

設置按鈕所處的命令參數屬性:

的.aspx

CommandArgument='<%#((GridViewRow)Container).RowIndex%>' 

的.cs

protected void gvCart0_RowCommand(object sender, GridViewCommandEventArgs e) 
    { 
     try 
     { 
      int index = Convert.ToInt32(e.CommandArgument); 
      if (e.CommandName == "selectCart") 
      { 

       Dictionary<int, ShoppingCartItem> cart = (Dictionary<int, ShoppingCartItem>)Session["Cart"]; 
       cart[index].Quantity = int.Parse(tbQuantity.Text); 

      } 

      gvCart0.DataBind(); 

     } 

     catch (Exception ee) 
     { 
      string message = ee.Message; 
     } 
    } 
+0

起初這並沒有什麼意義。所以讓我確定我現在明白了。 – 2011-05-16 23:43:27

+0

顯然你5分鐘後不能編輯。奇怪的O_o。 這是其他評論。 我是否創建了一個自定義的命令名稱,並抓取了我添加的aspx代碼中所點擊的行的索引? 我唯一的問題是,您聲明的索引變量是否保存該行中產品的產品ID,即35,還是保持行號,即1? – 2011-05-16 23:50:54

+0

我什至沒有得到創建的事件處理程序。 – 2011-05-17 00:36:19

0

對於RowEditing你必須做這樣的事情在RowEditing事件設置EditIndex,

protected void grid_RowEditing(object sender, GridViewEditEventArgs e) 
{ 
    grid.EditIndex = e.NewEditIndex; 
} 

你可能需要做同樣與OnSelectedIndexChanging事件。

0

首先在ItemCommand上獲取ProductId並將其存儲在View-State中,然後在ButtonClick事件中通過從View-State獲取ProductId來做相應的事情,並且不要忘記設置數據源到網格視圖,因爲您正在修改集合。

相關問題