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