Paging ne fonctionne pas à l'intérieur asp.net gridview AJAX UpdatePanel

voix
7

J'ai un GridView asp.net qui est à l'origine lié à un contrôle SqlDataSource, mais lorsque l'utilisateur appuie sur un bouton externe, il devient plutôt le contenu d'une table de données plutôt que d'un contrôle SqlDataSource. Je devais donc d'écrire du code en cas PageIndexChanging du gridview pour permettre la pagination. Mon code est le suivant:

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

Cela a fonctionné à merveille jusqu'à ce que j'ajouté un panneau de mise à jour AJAX de sorte que la page entière ne postback chaque fois qu'il paginée et radiomessagerie cessé de fonctionner. Je débogués et découvert qu'il appelle en fait l'événement PageIndexChanging, mais rien ne se passe.

J'ai cherché sur le web et a trouvé quelques personnes avec le même problème, mais leurs solutions ne fonctionne pas pour moi. Il y avait un sur ce site dont le problème a été résolu par ce qui suit:

En cas PageIndexChanging, où vous lier des données au réseau, assurez-vous, les données sont à nouveau extraites de la DB

Je ne sais pas ce que cela signifie; mes données étaient liés comme démontré ci-dessus. Je « activer la pagination » défini sur true et EnableSortingAndPagingCallbacks défini sur false.

J'apprécierais vraiment si quelqu'un peut me aider. Je compris mon balisage pour l'UpdatePanel ci-dessous. Merci beaucoup!

    <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>
Créé 27/08/2009 à 02:29
source utilisateur
Dans d'autres langues...                            


4 réponses

voix
2

Pour toute personne qui tombe par hasard sur cette question, je l'ai rencontré ce matin et ce poste était trompeur (atleast pour mon scénario). Pour moi, je devais simplement ajouter un événement PageIndexChanging comme déclencheur pour mon DataGrid pour de la détente UpdatePanel, et résolu mon problème.

Créé 19/06/2013 à 17:24
source utilisateur

voix
2

En cas PageIndexChanging, où vous lier des données au réseau, assurez-vous, les données sont à nouveau extraites de la DB, je ne sais pas ce que cela signifie; mes données étaient liés comme démontré ci-dessus.

Cela signifie que vous devez chercher à nouveau vos données dans votre code behind. Vous utilisez un SQLDataSource dans votre conception / page html, vous devez supprimer cela et utiliser une connexion SQL, commande SQL, etc. pour récupérer vos données, puis définissez que la source de données de votre contrôle.

Quelque chose comme ci-dessous:

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

Votre code devrait ressembler à ceci

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
Créé 27/08/2009 à 07:59
source utilisateur

voix
1

Il suffit de mettre à jour le panneau AJAX après DataBind ().

supposons id du panneau de mise à jour est 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
Créé 04/09/2010 à 10:59
source utilisateur

voix
1

Les contrôles qui ne sont pas compatibles avec les contrôles UpdatePanel

Les contrôles ASP.NET suivants ne sont pas compatibles avec les mises à jour de pages partielles, et ne sont donc pas pris en charge à l'intérieur d'un contrôle UpdatePanel:

GridView et DetailsView contrôle lorsque leur EnableSortingAndPagingCallbacks propriété est définie sur true. Le défaut est faux.

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

Créé 21/09/2009 à 14:58
source utilisateur

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