在获取网格视图以在C#中选择行时遇到问题

时间:2011-05-16 02:18:56

标签: c# asp.net gridview shopping-cart

我几天来一直在研究这个问题。

背景:我已设置购物车,并将其存储在会话中。我将它拉出会话并将其绑定到网格视图。我希望用户能够更改项目的数量。我遇到了几个问题,而这个问题就是不能自行解决。

每行都有一个按钮,命令名称为“选择”。当您单击该按钮时,它会弹出一个带有文本框的模态弹出窗口。

然而,当我单击按钮时,SelectedValue为-1并且它会抛出超出范围的异常。

它应该是该项目的ProductId。 DataKey Name是产品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();
}

3 个答案:

答案 0 :(得分:0)

对于RowEditing,你必须在RowEditing事件上做类似的事情来设置EditIndex,

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

您可能需要对OnSelectedIndexChanging事件执行相同的操作。

答案 1 :(得分:0)

首先在ItemCommand上获取ProductId并将其存储在View-State中,然后在ButtonClick事件上执行相应的操作,通过从View-State获取ProductId并不要忘记设置在修改集合时,数据源到网格视图。

答案 2 :(得分: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;
        }
    }