Paginação não funciona no gridview asp.net dentro AJAX updatepanel

votos
7

Eu tenho um gridview asp.net que é originalmente vinculado a um controle SqlDataSource, mas quando o usuário pressiona um botão externo, em vez recebe o conteúdo de uma tabela de dados em vez de um controle SqlDataSource. Assim, tive de escrever código no evento PageIndexChanging do gridview para permitir a paginação. Meu código é a seguinte:

Protected Sub gvEvents_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles gvEvents.PageIndexChanging

gvEvents.PageIndex = e.NewPageIndex

gvEvents.DataBind()

Isso funcionou muito bem até que eu adicionei um painel de atualização AJAX para que toda a página não postback cada vez que paginada, e paginação parou de funcionar. Eu depurado-lo e descobriu que ele é realmente chamando o evento PageIndexChanging, mas nada está acontecendo.

Eu procurei na web e encontrou algumas pessoas com o mesmo problema, mas suas soluções não funcionou para mim. Houve um neste site cujo problema foi resolvido pelo seguinte:

No evento PageIndexChanging, onde você vincular dados a grade, certifique-se, os dados são novamente obtido a partir da DB

Eu não sei o que isso significa; os dados foram sendo ligado como demonstrado acima. Tenho ativar a paginação definido como verdadeiro e EnableSortingAndPagingCallbacks definido como falso.

Eu realmente aprecio se alguém pode me ajudar. Eu estou incluindo minha marcação para o updatepanel abaixo. Muito obrigado!

    <asp:UpdatePanel ID=UpdatePanel2 runat=server UpdateMode=Conditional>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID=ibtnSearch />           
        </Triggers>

        <ContentTemplate>

            <asp:GridView ID=gvEvents runat=server  DataKeyNames = intID
                AutoGenerateColumns=False AllowPaging=True GridLines=None CellPadding=10 
                ForeColor=#333333 PageSize=6 DataSourceID=defaultDS >
                <RowStyle BackColor=#FFFBD6 ForeColor=#333333 />

                <Columns>
                    <asp:TemplateField HeaderText=Date>
                        <ItemTemplate>
                        <!-- put code block inside label? To set the formatter to include year if 
                        it's next year? -->
                        <asp:Label ID=Label1 runat=server 
                            Text = '<%# RepeatingMethods.DetermineOngoing(CType(Eval(dtmEventStartDate), DateTime) , CType(Eval(dtmEventEndDate), DateTime))%>'> </asp:Label>

                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField>
                  <ItemTemplate>
                  <asp:Label ID=Label4 runat=server Text='<%# Eval(chvAgeRange)  %>'> </asp:Label> <br />
                   <asp:Label ID=Label3 runat=server Text= '<%# Eval(chvState)  %>'> </asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:HyperLinkField DataNavigateUrlFields=intId 
                    DataNavigateUrlFormatString=EventDetail.aspx?intId={0} 
                    DataTextField=chvEventName />

                    <asp:BoundField DataField=chvBriefDescription HeaderText=Description 
                        SortExpression=chvBriefDescription />


            </Columns>
                     <FooterStyle BackColor=#990000 Font-Bold=True ForeColor=White />
                     <PagerStyle BackColor=#FFCC66 ForeColor=#333333 HorizontalAlign=Center />
                     <SelectedRowStyle BackColor=#FFCC66 Font-Bold=True ForeColor=Navy />
                     <HeaderStyle BackColor=#990000 Font-Bold=True ForeColor=White />
                     <AlternatingRowStyle BackColor=White />


<FooterStyle BackColor=#990000 Font-Bold=True ForeColor=White></FooterStyle>

<PagerStyle HorizontalAlign=Center BackColor=#FFCC66 ForeColor=#333333></PagerStyle>

<SelectedRowStyle BackColor=#FFCC66 Font-Bold=True ForeColor=Navy></SelectedRowStyle>

<HeaderStyle BackColor=#990000 Font-Bold=True ForeColor=White></HeaderStyle>

<AlternatingRowStyle BackColor=White></AlternatingRowStyle>
    </asp:GridView>



                <asp:Label ID=lblError runat=server></asp:Label>

    <br />
    </ContentTemplate>
    </asp:UpdatePanel>
Publicado 27/08/2009 em 02:29
fonte usuário
Em outras línguas...                            


4 respostas

votos
2

Para quem se depara com este problema, eu encontrei que este AM e este post foi enganosa (pelo menos para o meu cenário). Para mim, eu simplesmente tinha que adicionar um evento PageIndexChanging como um gatilho para o meu datagrid para o gatilho updatepanel de, e resolveu o meu problema.

Respondeu 19/06/2013 em 17:24
fonte usuário

votos
2

No evento PageIndexChanging, onde você vincular dados a grade, certifique-se, os dados são novamente obtido a partir da DB Eu não sei o que isso significa; os dados foram sendo ligado como demonstrado acima.

Isso significa que você precisa para buscar seus dados novamente em seu código por trás página. Você está usando um SqlDataSource em sua página de design / html, então você precisa para remover isso e usar uma conexão SQL, Comando SQL, etc, para buscar seus dados e, em seguida, defina-o como fonte de dados do seu controle.

Algo como a seguir:

http://www.aspnettutorials.com/tutorials/database/db-grid-aspnet2-vb.aspx

O código deve ser algo como isto

Protected Sub Page_Load(...)
   gvEvents.PageIndex = 0
   LoadData();// loads initial data
end sub

private sub LoadData()
 '' do your SQL Conn and Command here
 '' set your datasource of gridview here
end sub

Protected Sub gvEvents_PageIndexChanging(...) Handles gvEvents.PageIndexChanging
  gvEvents.PageIndex = e.NewPageIndex
  LoadData()
  gvEvents.DataBind()
end sub
Respondeu 27/08/2009 em 07:59
fonte usuário

votos
1

Basta atualizar o Painel AJAX após DataBind ().

assumir ID do painel de atualização é AJAXPanel

Protected Sub gvEvents_PageIndexChanging(...) Handles gvEvents.PageIndexChanging             
     gvEvents.PageIndex = e.NewPageIndex
     LoadData()
     gvEvents.DataBind()
     // The below line refreshes the update panel..  
     AJAXPanel.Update()
end sub
Respondeu 04/09/2010 em 10:59
fonte usuário

votos
1

Controles que não são compatíveis com controles UpdatePanel

Os seguintes controlos ASP.NET não são compatíveis com as actualizações de página parcial, e portanto não são suportadas no interior de um controle UpdatePanel:

GridView e DetailsView controla quando sua EnableSortingAndPagingCallbacks propriedade é definida como true. O padrão é falso.

http://www.asp.net/Ajax/Documentation/Live/overview/UpdatePanelOverview.aspx

Respondeu 21/09/2009 em 14:58
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more