2012-04-24 3 views
0

У меня есть сетка внутри панели обновления. В gridview у меня есть кнопка изображения. Кнопка используется для удаления строки.gridview delete происходит, но gridview не обновляется?

В случае rowCommand в виде сетки я сделать что-то вроде этого:

protected void gvLineItems_RowCommand(object sender, GridViewCommandEventArgs e) 
     { 
      GridViewRow row = (GridViewRow)((Control)e.CommandSource).NamingContainer; 

      switch (e.CommandName) 
      { 
       case "Delete": 
        Label l = null; 
        l = (Label)row.FindControl("lblLineItemID"); 

        if(l!=null) 
        { 
         long lID; 
         lID = Convert.ToInt64(l.Text); 
         BL.DeleteLineItem(Convert.ToInt64(hlID.Text), lID); 
         BindGrid(Session["SortExpression"].ToString(), Convert.ToInt32(rbSortGrid.SelectedValue)); 
        } 
        break; 
      } 
     } 

отладить это и я вижу ряд удаленных в базе данных (данные корректно удалены). Но gridview по-прежнему показывает «удаленную» строку даже после привязки сетки. Bind сетка просто это выглядит следующим образом:

protected void BindGrid(string sortExpression, int sortDirection) 
     { 
      DataSet ds 

      ds = BL.GetLineItemGridData(Convert.ToInt64(hlID.Text), sortExpression, sortDirection); 

      gvLineItems.DataSource = ds.Tables[0]; 
      gvLineItems.DataBind(); 
      gvLineItems.Visible = true; 
     } 

Набор данных возвращает правильные строки (без удаленной строки), но когда я смотрю на веб-странице он все еще показывает строку, которая была удалена.

Редактировать

Кто-то попросил HTML из GridView, здесь:

<asp:UpdatePanel ID="myPanel" runat="server" UpdateMode="Always"> 
      <ContentTemplate> 
       <asp:GridView GridLines="Horizontal" CellPadding="4" Font-Size="Small" 
        DataKeyNames="ID" Width="100%" AlternatingRowStyle-BackColor="#e5f1fa" 
        BackColor="#E8E8E8" HeaderStyle-ForeColor="White" 
        HeaderStyle-BackColor="#1367AD" ID="gvLineItems" runat="server" 
        AllowSorting="True" AutoGenerateColumns="False" ShowFooter="True" 
        onrowcommand="gvLineItems_RowCommand" > 
        <Columns> 
        <asp:TemplateField> 
         <ItemStyle Width="1px" /> 
         <ItemTemplate> 
          <asp:Label Width=".05px" ID="lblLineItemID" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.ID") %>' style="display:none"></asp:Label> 
         </ItemTemplate> 
         <ControlStyle Width="0px" /> 
         <HeaderStyle Width="0px" /> 
        </asp:TemplateField> 
        <asp:TemplateField> 
         <HeaderTemplate> 
          <asp:CheckBox ToolTip="Select/Deselect all rows?" ID="HeaderLevelCheckBox" onclick="toggleSelection(this);" runat="server" /> 
         </HeaderTemplate> 
         <ItemTemplate> 
          <asp:CheckBox ID="chkSelector" ToolTip="Select row?" runat="server" onclick="ChangeRowColor(this)" /> 
         </ItemTemplate> 
         <ItemStyle HorizontalAlign="Center" /> 
         <HeaderStyle HorizontalAlign="Center" /> 
        </asp:TemplateField> 
        <asp:TemplateField> 
         <ItemTemplate> 
         <asp:ImageButton ID="ibAddLineItem" runat="server" ImageUrl="images/InsertRow.gif" CommandName="Insert" ToolTip="Insert new line item."/> 
         </ItemTemplate> 
        </asp:TemplateField> 
        <asp:TemplateField> 
         <ItemTemplate> 
         <asp:ImageButton ID="ibDeleteLineItem" runat="server" ImageUrl="images/DeleteRow.gif" CommandName="Delete" ToolTip="Delete line item."/> 
         </ItemTemplate> 
        </asp:TemplateField>       
        <asp:TemplateField HeaderText="Item #" SortExpression="LineItemNumber"> 
         <ItemTemplate> 
          <asp:Label runat="server" ID="lblItemNumber" Visible="True" Text='<%# DataBinder.Eval(Container, "DataItem.LineItemNumber") %>' /> 
         </ItemTemplate> 
         <ItemStyle Width="10%" HorizontalAlign="Center" /> 
         <HeaderStyle HorizontalAlign="Center" Width="10%" /> 
        </asp:TemplateField> 
        <asp:TemplateField HeaderText="Quantity" SortExpression="LineItemQuantity"> 
          <ItemTemplate> 
           <asp:TextBox Font-Names="Arial" ToolTip="Enter item quantity." ID="txtLineItemQuantity" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.LineItemQuantity") %>' /> 
           </ItemTemplate> 
           <ItemStyle Width="4%" HorizontalAlign="Center" /> 
           <HeaderStyle HorizontalAlign="Center" Width="4%" /> 
        </asp:TemplateField> 
        <asp:TemplateField HeaderText="Description" SortExpression="LineItemDescription"> 
          <ItemTemplate> 
           <asp:TextBox Columns="15" Width="300px" Font-Names="Arial" ToolTip="Enter item description." ID="txtLineItemDescription" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.LineItemDescription") %>' /> 
           </ItemTemplate> 
           <ItemStyle Width="15%" HorizontalAlign="Left" /> 
           <HeaderStyle HorizontalAlign="Left" /> 
        </asp:TemplateField> 
        <asp:TemplateField HeaderText="Added By" SortExpression="AddedBy"> 
         <ItemTemplate> 
          <asp:Label runat="server" ID="lblAddedBy" Visible="True" Text='<%# DataBinder.Eval(Container, "DataItem.AddedBy") %>' /> 
         </ItemTemplate> 
         <ItemStyle Width="10%" HorizontalAlign="Center" /> 
         <HeaderStyle HorizontalAlign="Center" Width="10%" /> 
        </asp:TemplateField> 
        <asp:TemplateField HeaderText="Added On" SortExpression="AddedOn"> 
         <ItemTemplate> 
          <asp:Label runat="server" ID="lblAddedOn" Visible="True" Text='<%# DataBinder.Eval(Container, "DataItem.AddedOn") %>' /> 
         </ItemTemplate> 
         <ItemStyle Width="10%" HorizontalAlign="Center" /> 
         <HeaderStyle HorizontalAlign="Center" Width="10%" /> 
        </asp:TemplateField> 
        </Columns> 
       </asp:GridView> 
      </ContentTemplate> 
      <Triggers> 
       <asp:AsyncPostBackTrigger ControlID="btnAddLineItem" /> 
       <asp:AsyncPostBackTrigger ControlID="rbSortGrid" /> 
      </Triggers> 
     </asp:UpdatePanel> 
+0

Можете ли вы также добавить html сетки, включая панель обновления – Adil

+0

@Adil Я добавил ее. – oJM86o

+0

Эта удаленная строка существует после того, как вы получили записи после удаления? а именно эта строка «ds = BL.GetLineItemGridData (Convert.ToInt64 (hlID.Text), sortExpression, sortDirection); Я считаю, что это то, что вы имели в виду, просто разъясняющее. – Etch

ответ

0

Err Я получил его, я просто добавил следующее:

protected void gvLineItems_RowDeleting(object sender, GridViewDeleteEventArgs e) 
     { 
      DataSet ds = null; 
      gvLineItems.DataSource = null; 
      ds = BL.GetLineItemGridData(Convert.ToInt64(hlID.Text), Session["SortExpression"].ToString(), Convert.ToInt32(rbSortGrid.SelectedValue)); 

      gvLineItems.DataSource = ds.Tables[0]; 
      gvLineItems.DataBind(); 
      gvLineItems.Visible = true; 
     } 

И удалили вызов BindGrid от этого:

protected void gvLineItems_RowCommand(object sender, GridViewCommandEventArgs e) 
     { 
      GridViewRow row = (GridViewRow)((Control)e.CommandSource).NamingContainer; 

      switch (e.CommandName) 
      { 
       case "Delete": 
        Label l = null; 
        l = (Label)row.FindControl("lblLineItemID"); 

        if(l!=null) 
        { 
         long lID; 
         lID = Convert.ToInt64(l.Text); 
         BL.DeleteLineItem(Convert.ToInt64(hlID.Text), lID); 
         //BindGrid(Session["SortExpression"].ToString(), Convert.ToInt32(rbSortGrid.SelectedValue)); 
        } 
        break; 
      } 
     } 
0

В качестве альтернативы вы можете связать свой GridView в событии PreRender страницы, которое происходит после завершения обработки контрольных событий. Вам не нужно подключать источник данных и привязывать сетку к событию rowCommand.

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