2013-09-26 8 views
0

У меня есть gridview внутри updatepanel, который после удаления записи не обновляется.gridview не обновляется после удаления в updatepanel

<ajax:UpdatePanel ID="SearchResultAjax" runat="server" UpdateMode="Always"> 
<ContentTemplate> 
<asp:GridView runat="server" ID="mwOffersGrid" AutoGenerateColumns="False" Width="100%" DataKeyNames="OfferId" OnRowCommand="mwOffersGrid_RowCommand" 
    <Columns> 
     <asp:TemplateField HeaderText="Offer #"> 
     <ItemTemplate> 
      <asp:HyperLink runat="server" ID="offerIdLink" NavigateUrl='<%# String.Format("/Admin/Marketing/MWOffers/EditOffer.aspx?OfferId={0}",Eval("OfferId")) %>' 
      Text='<%# Eval("OfferId") %>' /> 
     </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField> 
      <ItemStyle HorizontalAlign="Right" Wrap="false" /> 
      <ItemTemplate> 
      <asp:ImageButton ID="EditButton" runat="server" CommandName="EditOffer" CommandArgument='<%# Eval("OfferId") %>' ToolTip="Edit" SkinID="EditIcon" /> 
      <asp:ImageButton ID="DeleteButton" runat="server" CommandName="DeleteOffer" CommandArgument='<%# Eval("OfferId") %>' ToolTip="Delete" 
      SkinID="DeleteIcon" OnClientClick='<%# Eval("OfferId", "return confirm(\"Are you sure you want to delete Offer # {0}?\")") %>' /> 
      </ItemTemplate> 
    </asp:TemplateField> 
    </Columns> 
</asp:GridView> 
</ContentTemplate> 
</ajax:UpdatePanel> 

Код За

protected void Page_Load(object sender, EventArgs e) 
    { 
    MWOffersCollection OffersCollection = MWOffersDataSource.LoadForCriteria(SqlCriteria, "OfferPageType ASC, OrderBy ASC"); 
    if (!Page.IsPostBack) 
    { 
     if (OffersCollection != null) 
     { 
      BindGrid(); 
     } 
    } 
    } 

    public void BindGrid() 
    { 
    mwOffersGrid.DataSource = OffersCollection; 
    mwOffersGrid.DataBind(); 
    } 

protected void mwOffersGrid_RowCommand(object sender, GridViewCommandEventArgs e) 
    { 
    switch (e.CommandName) 
    { 

    case "EditOffer": 
     var offerId = AlwaysConvert.ToInt(e.CommandArgument); 
     Response.Redirect(string.Format("~/Admin/Marketing/MWOffers/EditOffer.aspx?OfferId={0}", offerId)); 
     break; 

    case "DeleteOffer": 
      var id = AlwaysConvert.ToInt(e.CommandArgument); 
        OffersCollection.Cast<MWOffers>().Single(o => o.OfferId == id).IsValid = false; 
        OffersCollection.Save(); 
        BindGrid(); 
        break; 
     break; 
    } 
    } 

ответ

1

Это мой обновленный ответ. проблема связана с загрузкой элемента коллекции при загрузке страницы.

MWOffersCollection OffersCollection; 
protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     BindGrid();   
    } 
} 

private void BindGrid() 
{ 
OffersCollection = MWOffersDataSource.LoadForCriteria(SqlCriteria, "OfferPageType ASC, OrderBy 
ASC"); 
    mwOffersGrid.DataSource = OffersCollection; 
    mwOffersGrid.DataBind(); 
} 

protected void mwOffersGrid_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    switch (e.CommandName) 
    { 
    case "EditOffer": 
     var offerId = AlwaysConvert.ToInt(e.CommandArgument); 
     Response.Redirect(string.Format("~/Admin/Marketing/MWOffers/EditOffer.aspx?OfferId={0}", offerId)); 
     break; 

    case "DeleteOffer": 
     var id = AlwaysConvert.ToInt(e.CommandArgument); 
     DeleteRow(id); 
     BindGrid(); //bind the grid again 
     break; 
    } 
} 
private void DeleteRow(int id) 
{ 
    var id = AlwaysConvert.ToInt(e.CommandArgument); 
    OffersCollection.Cast<MWOffers>().Single(o => o.OfferId == id).IsValid = false; 
    OffersCollection.Save(); 
} 
+0

Я делал другую логику, которая мне нужна на моей странице ... я удалил это и обновил свой вопрос, пожалуйста, посмотрите. –

+0

@ patel.milanb см. Мой обновленный ответ –

+0

перенаправление на указанный URL-адрес не является вариантом для моего проекта. –

1

Я сделал аналогичную работу, но сделал с помощью шаблона редактирования. , который смог легко управлять операциями взаимозаменяемости. , например мой GridView код тега

<asp:GridView ID="gvTrip" runat="server" AutoGenerateColumns="False" OnRowDataBound="gvTrip_RowDataBound" 
              CellPadding="4" DataKeyNames="trip_code" ForeColor="#333333" GridLines="None" 
              OnRowCancelingEdit="gvTrip_RowCancelingEdit" OnRowDeleting="gvTrip_RowDeleting" 
              OnRowEditing="gvTrip_RowEditing" OnRowUpdating="gvTrip_RowUpdating" RowStyle-Height="10px"> 

после этого я дал две командные поля:

<asp:CommandField HeaderText="Edit-Update" ShowEditButton="True" ItemStyle-Width = "100px"/> 
    <asp:CommandField HeaderText="Delete" ShowDeleteButton="True" ItemStyle-Width = "100px"/> 

имел шаблон элемента сетки в пункте две части и редактирования базы подписки:

<asp:TemplateField HeaderText="Trip End Time"> 

<ItemTemplate> 
                 <asp:Label ID="lblgTripEndTime" runat="server" Text='<%# Bind("TRIP_END_TIME") %>' Width="100px"></asp:Label> 
                </ItemTemplate> 

                <EditItemTemplate> 
                 <asp:TextBox ID="txtgTripEndTime" Visible="true" runat="server" 
                  Text='<%# Bind("TRIP_END_TIME") %>' MaxLength="5" CssClass="phoneNumber1" Width="100px"> </asp:TextBox> 


                </EditItemTemplate>   
</EditItemTemplate> 

сейчас мой код удаления будет очень простым

protected void gvTrip_RowDeleting(object sender, GridViewDeleteEventArgs e) 
    { 

     string strTripCode = Convert.ToString(((Label)gvTrip.Rows[e.RowIndex].FindControl("lblgTripCode")).Text.Trim()); 
     objMasterTransport.deleteTripDetail(strTripCode); 

     BindData(); 
     DropdownhelperENT.PopulateDistinctDropDown(drpDateSelection, "TRANS_M_TRIP", "TRIP_DATE"); 
    } 
+0

Я обновил свой вопрос, пожалуйста, посмотрите ... –

+0

вы использовали объект его хорошо. пожалуйста, проверьте, что ваше состояние загрузки страницы получает его правильно! –

+0

@amit вы быстро в ответ :) –

1

Попробуйте

var id = AlwaysConvert.ToInt(e.CommandArgument); 
     OffersCollection.Cast<MWOffers>().Single(o => o.OfferId == id).IsValid = false; 
       OffersCollection.Save(); 
BindGrid(); 
SearchResultAjax.Update(); 
break; 

Это SearchResultAjax.Update(); необходимо обновить панель после GridView привязки данных произошло.

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