2013-05-27 5 views
0

я следующие GridView:Gridview OnRowCommand событие не стрельбы

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

     } 

Функции для расчета порядка amt и количества элементов:

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.

Пожалуйста, дайте мне знать, что именно неправильно.

ответ

1

Проблема, которая возникает у вас на странице загрузки метода. потому что вам нужен метод 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.

Я надеюсь, что это поможет.

EDIT:

Для получения дополнительной помощи Invalid Postback on Grid

+0

Эй урод ... спасибо Это работает все отлично теперь. –

+0

Добро пожаловать :) –

Смежные вопросы