【问题标题】:Grid view row command is firing after every second click网格视图行命令在每秒钟单击一次后触发
【发布时间】:2013-11-21 21:40:55
【问题描述】:

我在网格视图中有购物车。网格位于更新面板中始终具有更新模式。网格视图本身位于 用户控件 中,并且此用户控件呈现在子页面(GridView --> 用户控件 --> 子 aspx 页面 --> 母版页)中。每当我单击任何按钮来修改购物车时,gridview 行命令不会第一次触发,但是当我再次单击该按钮时,行命令会正确触发。现在我不知道为什么 row 命令事件 没有在第一次点击时触发,它只在每次偶数点击(第二次点击)时触发

平均售价:

<asp:GridView ID="GVCart" runat="server" AutoGenerateColumns="False" OnRowCommand="CartUpdate">
    <Columns>
        <asp:BoundField DataField="Product_Name" HeaderText="Product Name">               
        </asp:BoundField>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:ImageButton ID="Button3" runat="server" CommandArgument='<%# Eval("Product_ID") %>'
                    CommandName="DecreseCartQty" Height="20px" ToolTip="Minus" AlternateText="+" />
                <asp:ImageButton ID="ImageButton1" runat="server" CommandArgument='<%# Eval("Product_ID") %>'
                    CommandName="IncreaseCartQty" Height="20px" ToolTip="Add" AlternateText="-" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Label ID="ABC" runat="server" Text='<%# Eval("ItemQTY")+" * "+Eval("Price")+" = "+Eval("TotalPrice") %> '></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:ImageButton ID="Button4" runat="server" CommandArgument='<%# Eval("Product_ID") %>' CommandName="Remove" ToolTip="Cancel"/>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

C#:(在用户控制中)

protected void CartUpdate(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "IncreaseCartQty")
            {

                int ProductId = Convert.ToInt32(e.CommandArgument.ToString());
                DataTable CartDT = (DataTable)Session["cart"];

                for (int i = 0; i < CartDT.Rows.Count; i++)
                {
                    if (CartDT.Rows[i]["Product_ID"].ToString() == ProductId.ToString())
                    {
                        CartDT.Rows[i]["ItemQTY"] = Convert.ToInt32(CartDT.Rows[i]["ItemQTY"]) + 1;
                        CartDT.Rows[i]["TotalPrice"] = Convert.ToInt32(CartDT.Rows[i]["Price"]) * Convert.ToInt32(CartDT.Rows[i]["ItemQTY"]);
                        //Page.Response.Redirect(Page.Request.Url.ToString(), true);
                    }
                }



            }
            if (e.CommandName == "DecreseCartQty")
            {
                int ProductId = Convert.ToInt32(e.CommandArgument.ToString());
                DataTable CartDT = (DataTable)Session["cart"];

                for (int i = 0; i < CartDT.Rows.Count; i++)
                {
                    if (CartDT.Rows[i]["Product_ID"].ToString() == ProductId.ToString())
                    {
                        if (Convert.ToInt32(CartDT.Rows[i]["ItemQTY"]) > 1)
                        {
                            CartDT.Rows[i]["ItemQTY"] = Convert.ToInt32(CartDT.Rows[i]["ItemQTY"]) - 1;
                            CartDT.Rows[i]["TotalPrice"] = Convert.ToInt32(CartDT.Rows[i]["Price"]) * Convert.ToInt32(CartDT.Rows[i]["ItemQTY"]);
                           // Page.Response.Redirect(Page.Request.Url.ToString(), true);
                        }

                    }
                }

            }
            if (e.CommandName == "Remove")
            {
                int ProductId = Convert.ToInt32(e.CommandArgument.ToString());
                DataTable CartDT = (DataTable)Session["cart"];

                for (int i = 0; i < CartDT.Rows.Count; i++)
                {
                    if (CartDT.Rows[i]["Product_ID"].ToString() == ProductId.ToString())
                    {
                        CartDT.Rows.RemoveAt(i);
                        //Page.Response.Redirect(Page.Request.Url.ToString(), true);
                    }
                }
            }
        }

谁能告诉我我做错了什么。你的回答对我会有很大的帮助。 提前致谢。

【问题讨论】:

    标签: c# asp.net gridview user-controls


    【解决方案1】:

    它的行为正常。您应该在 CartUpdate 之后重新绑定 gridview,这样就不需要再次回发。

    只需在

    之后添加这些行
    if (e.CommandName == "Remove")
    {
        int ProductId = Convert.ToInt32(e.CommandArgument.ToString());        
        DataTable CartDT = (DataTable)Session["cart"];
    
        for (int i = 0; i < CartDT.Rows.Count; i++)
        {
            if (CartDT.Rows[i]["Product_ID"].ToString() == ProductId.ToString())
            {
                CartDT.Rows.RemoveAt(i);
                //Page.Response.Redirect(Page.Request.Url.ToString(), true);
            }
        }
    }
    DataTable CartDT = (DataTable)Session["cart"];
    gridview1.datasource=CartDT ;
    gridview1.databind();
    

    【讨论】:

      【解决方案2】:

      结帐this 回答,我想它会解决你的问题。如果您在用户控件中有网格视图,则可能会出现此问题。当我在用户控件中使用网格视图时,我遇到了同样的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-30
        • 2018-03-21
        • 2021-11-08
        • 2014-08-21
        • 1970-01-01
        • 2014-01-17
        • 1970-01-01
        相关资源
        最近更新 更多