C# 网格视图行命令在每秒钟单击一次后触发

C# 网格视图行命令在每秒钟单击一次后触发,c#,asp.net,gridview,user-controls,C#,Asp.net,Gridview,User Controls,我在网格视图中看到了购物车。网格位于更新面板中,更新模式始终为。网格视图本身位于用户控件中,此用户控件呈现在子页(网格视图-->用户控件-->子aspx页-->母版页)中。每当我单击任何按钮修改购物车时,gridview行命令不会第一次触发,但当我再次单击按钮第二次时,行命令会正确触发。现在我不知道为什么行命令事件在第一次单击时不触发,而仅在每次偶数单击(第二次单击)时触发 ASP: <asp:GridView ID="GVCart" runat="server" AutoGenerate

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

ASP:

<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#::(在用户控制中)

protectedvoid CartUpdate(对象发送方,GridViewCommandEventArgs e)
{
如果(e.CommandName==“IncreaseCartQty”)
{
int ProductId=Convert.ToInt32(例如,CommandArgument.ToString());
DataTable CartDT=(DataTable)会话[“cart”];
对于(int i=0;i1)
{
CartDT.Rows[i][“ItemQTY”]=转换为32(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);
}
}
}
}
如果(例如,CommandName==“删除”)
{
int ProductId=Convert.ToInt32(例如,CommandArgument.ToString());
DataTable CartDT=(DataTable)会话[“cart”];
对于(int i=0;i
谁能告诉我我做错了什么。你的回答将对我大有帮助。
提前谢谢。

它运行正常。您应该在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();
if(e.CommandName==“删除”)
{
int ProductId=Convert.ToInt32(例如,CommandArgument.ToString());
DataTable CartDT=(DataTable)会话[“cart”];
对于(int i=0;i
结帐回答,我想它会解决你的问题。如果用户控件中有网格视图,则可能会出现此问题。当我在用户控件中使用网格视图时,我也遇到了同样的问题

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();