2013-09-20 5 views
0

У меня есть две обновления, одна из которых содержит gridview. Проблема в том, что Pagination работает правильно только в первый раз.GridView PAGING внутри UpdatePanel не работает для изменения второй страницы, почему?

Вот разметка:

<asp:UpdatePanel ID="upAnswers" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true"> 
    <ContentTemplate> 
     <asp:GridView ID="gvAnswers" runat="server" CssClass="gv" Width="100%" ShowHeader="false" AllowPaging="True" PageSize="2" EnableSortingAndPagingCallbacks="true" OnPageIndexChanging="gvAnswers_PageIndexChanging" AutoGenerateColumns="False" AlternatingRowStyle-BackColor="#eee"> 
      <Columns> 
       <asp:TemplateField HeaderText="Questions" ShowHeader="False"> 
        <ItemTemplate> 
         <asp:Label ID="lblQuestions" onclick=<%# Eval("FaqID", "$('.lblAnswers_{0}').toggle('fast')") %> CssClass="block" runat="server" Text='<%# Eval("Title") %>'></asp:Label> 
         <asp:Panel ID="pnlS1" runat="server" CssClass='<%# Eval("FaqID", "lblAnswers_{0}") %>' style="display: none;"> 
          <asp:Label ID="Label1" runat="server" Text='<%# Eval("Question") %>' CssClass="block bold"></asp:Label> 
          <asp:Label ID="lblAnswers" runat="server" Text='<%# Eval("Answer") %>'></asp:Label> 
         </asp:Panel> 
        </ItemTemplate> 
       </asp:TemplateField> 
      </Columns> 
     </asp:GridView> 
    </ContentTemplate> 
</asp:UpdatePanel> 
<asp:UpdateProgress ID="upgAnswers" runat="server" AssociatedUpdatePanelID="upAnswers" DisplayAfter="300"> 
    <ProgressTemplate> 
     <div id="uiBlock" class="uiBlock"> 
     </div> 
    </ProgressTemplate> 
</asp:UpdateProgress> 

и код позади:

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

protected void GetAnsweredPublicFAQs() 
{ 
    DataSet ds = cFAQs.getAnsweredPublicFAQs(); 

    gvAnswers.DataSource = ds; 
    gvAnswers.DataBind(); 
} 

protected void gvAnswers_PageIndexChanging(object sender, GridViewPageEventArgs e) 
{ 
    gvAnswers.PageIndex = e.NewPageIndex; 
    GetAnsweredPublicFAQs(); 
    gvAnswers.DataBind(); 
    upAnswers.Update(); 
} 

Как реф, я использую ASP.NET 4.0 C#.

Любая помощь была бы весьма признательна.

С уважением, Кардо

+0

Вы пытались использовать UpdateMode = "Always"? кроме того, поставить ChildrenAsTriggers без каких-либо триггеров бесполезно, потому что UpdatePanel с UpdateMode = «Условный» будет обновляться всякий раз, когда дочерний элемент управления выполняет обратную передачу. – Alessio

+0

Что происходит во второй раз? Все, что вы сказали, это то, что разбиение на страницы работает только в первый раз. – jadarnel27

+0

@ jadarnel27 второй раз ничего не происходит. – Kardo

ответ

3

Изменить объявление UpdatePanel начать так:

<asp:UpdatePanel ID="upAnswers" runat="server" UpdateMode="Conditional"> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="gvAnswers" EventName="PageIndexChanging" /> 

Всякий раз, когда у меня были проблемы с этим UpdatePanel с, я считаю явно декларируя Триггеры, чтобы быть полезным. Особенно, когда вы используете событие «не по умолчанию» для запуска AsyncPostBack (SelectedIndexChanged - это событие по умолчанию для GridView).

Кроме того, ChildrenAsTriggers по умолчанию имеет значение true, поэтому я удалил это из разметки.

+0

К сожалению, это не сработало. Как и прежде, когда я перехожу на страницу 2, попадание других страниц страницы ничего не делает. – Kardo

+0

@ rick_schott привет, у вас есть идеи по моей проблеме? – Kardo

+0

@Kardo Какова общая структура остальной части вашей страницы? Является ли эта UpdatePanel вложенной в другую UpdatePanel или что-то еще? – jadarnel27