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

本文关键字:选择 遇到 问题 网格 视图 获取 | 更新日期: 2023-09-27 17:56:25

我已经研究这个问题几天了。

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

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

但是,当我单击该按钮时,SelectedValue 为 -1,并且会引发超出范围异常。

它应该是项的产品 ID。数据密钥名称是产品 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();
}

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

注意::p lease 将按钮的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;
        }
    }

对于 RowEdit,您必须在 RowEditing 事件上执行类似操作才能设置 EditIndex,

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

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

首先,

在 ItemCommand 上获取 ProductId 并将其存储在视图状态中,然后在 ButtonClick 事件上通过从视图状态获取 ProductId 来执行您想要执行的相应操作,并且不要忘记在修改集合时将数据源设置为网格视图。