簡體   English   中英

Gridview OnRowCommand事件未觸發

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM