[英]Gridview OnRowCommand event not firing
我一直在使用gridview:
<asp:Panel ID="pnlScroll" runat="server" ScrollBars="Auto">
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:GridView ID="GVCart2" runat="server" AutoGenerateColumns="False" GridLines="Vertical" onrowcommand="CartUpdate">
<AlternatingRowStyle BackColor="#CCCCCC" />
<Columns>
<asp:BoundField DataField="Product_Name" HeaderText="Product Name" />
<asp:BoundField DataField="Product_ID" HeaderText="Product ID" />
<asp:BoundField DataField="ItemQTY" HeaderText="ItemQTY" />
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="IncreaseCartQty" runat="server" CommandArgument="<%#((GridViewRow)Container).RowIndex %>" CommandName="IncreaseCartQty" Text="+" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Price" HeaderText="Price" />
<asp:BoundField DataField="TotalPrice" HeaderText="TotalPrice" />
</Columns>
<FooterStyle BackColor="#CCCCCC" />
<HeaderStyle BackColor="Black" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#000099" Font-Bold="True" ForeColor="White" />
<SortedAscendingCellStyle BackColor="#F1F1F1" />
<SortedAscendingHeaderStyle BackColor="#808080" />
<SortedDescendingCellStyle BackColor="#CAC9C9" />
<SortedDescendingHeaderStyle BackColor="#383838" />
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Panel>
gridview有一個增加項目數量的按鈕。 該按鈕具有命令名稱“ IncreaseCartQty” 。 OnRowCommand我正在嘗試調用“ CartUpdate” 。 但是問題是OnRowCommand事件沒有觸發 。
代碼背后的頁面如下:
頁面加載 :
protected void Page_Load(object sender, EventArgs e)
{
if (Session["ItemsCount"] != null)
{
CartDT = (DataTable)Session["cart"];
GVCart2.DataSource = CartDT;
GVCart2.DataBind();
}
}
我想在gridview OnRowCommand上調用的函數是:
public void CartUpdate(object sender, GridViewCommandEventArgs e)
{
CartDT = (DataTable)Session["cart"];
if (e.CommandName == "IncreaseCartQty")
{
DataRow DR = CartDT.NewRow();
int rowIndex = Convert.ToInt32(e.CommandArgument.ToString());
int qty = Convert.ToInt32(CartDT.Rows[rowIndex][2].ToString());
DR[0] = CartDT.Rows[rowIndex][0];
DR[1] = CartDT.Rows[rowIndex][1];
DR[2] = ++qty;
DR[3] = CartDT.Rows[rowIndex][3];
DR[4] = qty * double.Parse(CartDT.Rows[rowIndex][3].ToString());
CartDT.Rows.RemoveAt(rowIndex);
CartDT.Rows.InsertAt(DR, rowIndex);
CartDT.AcceptChanges();
Session["cart"] = CartDT;
GVCart2.DataSource = CartDT;
GVCart2.DataBind();
TotalOrderAmt();
TotalItemsCount();
}
}
計算訂單金額和項數的功能如下:
public void TotalOrderAmt()
{
double t = 0;
for (int i = 0; i < CartDT.Rows.Count; i++)
{
t = t + double.Parse(CartDT.Rows[i][4].ToString());
}
Session["TotalOrderAmt"] = t;
}
public void TotalItemsCount()
{
double t = 0;
for (int i = 0; i < CartDT.Rows.Count; i++)
{
t = t + double.Parse(CartDT.Rows[i][4].ToString());
}
Session["ItemsCount"] = t;
}
現在,我無法理解為什么OnRowCommand事件沒有觸發 。 單擊gridview中的按鈕沒有任何反應。
請讓我知道確切的地方。
您遇到的問題在於頁面加載方法。 因為您需要Ispostback方法。
替換它(請參見下面的代碼)
protected void Page_Load(object sender, EventArgs e)
{
if (Session["ItemsCount"] != null)
{
CartDT = (DataTable)Session["cart"];
GVCart2.DataSource = CartDT;
GVCart2.DataBind();
}
}
為此(請參見下面的代碼)
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (Session["ItemsCount"] != null)
{
CartDT = (DataTable)Session["cart"];
GVCart2.DataSource = CartDT;
GVCart2.DataBind();
}
}
}
如果不使用!Ispostback
方法,它將引發錯誤並且不執行Onrowcommand參數。
希望對您有所幫助。
編輯:
有關更多幫助,請參見無效的網格回發
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.