La pagination ne fonctionne pas dans asp.net gridview à l'intérieur de l'AJAX updatepanel
J'ai un asp.net gridview qui est à l'origine lié à un contrôle sqldatasource, mais lorsque l'utilisateur appuie sur un bouton externe, il récupère le contenu d'un datatable plutôt que d'un contrôle SQLdatasource. J'ai donc dû écrire du code dans le PageIndexChanging cas de la gridview pour permettre l'échange. Mon code est comme suit:
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'ai ajouté un AJAX panneau de mise à jour de sorte que la page entière ne serait pas de publication à chaque fois qu'il paginée, et la pagination de l'arrêt de travail. J'ai débogué et découvrit qu'il est fait appel de la PageIndexChanging événement, mais rien ne se passe.
J'ai cherché sur le web et trouvé un peu de gens avec le même problème, mais leurs solutions n'ont pas fonctionné pour moi. Il y en avait un sur ce site dont le problème a été résolu par le texte suivant:
Dans PageIndexchanging événement, où vous lier les données de la grille, assurez-vous, les données sont encore lues à partir de la DB
Je ne sais pas ce que cela signifie; mes données ont été liés comme démontré ci-dessus. J'ai "activer la pagination" true et EnableSortingAndPagingCallbacks définie sur false.
Je serais vraiment reconnaissant si quelqu'un peut m'aider. Je suis à mes, y compris le balisage de 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>
Voici une partie de celui-ci (c'est une longue sub - je ne peux pas tout mettre dans) searchConnection.Open() searchCommand = New SqlCommand(searchString, searchConnection) searchAdapter = New SqlDataAdapter(searchCommand) searchDatatable = New DataTable searchAdapter.De remplissage(searchDatatable) Si searchDatatable.Les lignes.Count > 0 then gvEvents.DataSourceID = Rien gvEvents.DataSource = searchDatatable gvEvents.DataBind()
OriginalL'auteur | 2009-08-27
Vous devez vous connecter pour publier un commentaire.
Cela signifie que vous avez besoin de récupérer vos données dans votre code-behind de la page. Vous êtes à l'aide d'un SQLdatasource dans votre conception/page html, si vous avez besoin de l'enlever et utiliser une Connexion SQL, SQL de Commande, etc. pour récupérer vos données, puis le définir comme votre datasource du contrôle.
Quelque chose comme ci-dessous:
http://www.aspnettutorials.com/tutorials/database/db-grid-aspnet2-vb.aspx
Votre code devrait ressembler à quelque chose comme ceci
Parce que les données à partir de votre base de données n'est pas mémorisés de manière persistante dans votre gridview/page. Lorsque vous effectuez une publication à l'intérieur d'un panneau de mise à jour, vous devez extraire les enregistrements de nouveau de sorte que vous pouvez charger dans le contrôle gridview parce qu'à cet instant, il n'y a pas de données dans votre base de données.
Mis à jour mon post original pour inclure des exemples de code
Je vous remercie beaucoup. Donc, vous dites que j'ai besoin de revenir à la base de données et exécutez à nouveau tous mes sélectionner les commandes à chaque fois que je veux télécharger une nouvelle page? Pourquoi n'ai-je pas le faire à l'extérieur du panneau de mise à jour?
Oui c'est ce que je dis. Je pense que c'est parce que lorsque vous définissez la source de données et du rendu, puis il enregistre uniquement les éléments que vous voyez (page actuelle) à la vue de l'état, de sorte que sur d'autres post sur le dos, il rend juste ce qui est dans le contrôle de l'état d'affichage. Mais si vous changez de page d'index, puis il a besoin d'obtenir les éléments quelle que soit la page d'index est l'index de nouveau afin qu'il puisse stocker la nouvelle liste d'éléments à l'état d'affichage.
OriginalL'auteur Jim W
Pour n'importe qui qui bute sur ce problème, que j'ai rencontré il ce SUIS et ce poste était trompeuse (au moins pour mon cas). Pour moi, j'ai simplement eu à ajouter un PageIndexChanging Événement comme un élément déclencheur de mon datagrid pour l'updatepanel du déclencheur, et cela a résolu mon problème.
OriginalL'auteur ewitkows
Contrôles qui ne Sont Pas Compatibles avec les Contrôles UpdatePanel
La suite ASP.NET les contrôles ne sont pas compatibles avec de page partielle des mises à jour, et ne sont donc pas pris en charge à l'intérieur d'un contrôle UpdatePanel:
GridView et DetailsView de contrôles lors de leur EnableSortingAndPagingCallbacks propriété est définie sur true. La valeur par défaut est false.
http://www.asp.net/Ajax/Documentation/Live/overview/UpdatePanelOverview.aspx
OriginalL'auteur rick schott
Juste mettre à jour l'AJAX groupe après databind().
assumer id du Panneau de mise à Jour est AJAXPanel
OriginalL'auteur venkatx5