我几天来一直在研究这个问题。
背景:我已设置购物车,并将其存储在会话中。我将它拉出会话并将其绑定到网格视图。我希望用户能够更改项目的数量。我遇到了几个问题,而这个问题就是不能自行解决。
每行都有一个按钮,命令名称为“选择”。当您单击该按钮时,它会弹出一个带有文本框的模态弹出窗口。
然而,当我单击按钮时,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();
}
答案 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;
}
}