Pour répondre à plus de la réponse @ adam0101, ce je pense qu'il entend par » ... Il se ma source de données personnalisée revenait zéro pour le nombre d'enregistrements. « Est que vous devrez peut-être » rattachez "la source de données à la grille. ASP.net sait automatiquement que vous revenez enregistrement-'n ', où' n 'est la première ligne suivante de la page suivante. Cette solution est plus pour les cas où vous ne voulez pas autoriser asp.net gérer automatiquement les données dans votre grille, peut-être en raison de vouloir charger des données après un autre événement (un bouton LOAD DATA par exemple), et non lorsque le la page a été chargée pour la première fois. Mais, comme Adam l'a mentionné ci-dessous, la véritable raison était qu'il "... avait créé une sous-classe de source de données qui avait hérité de ObjectDataSource, mais qu'elle avait été implémentée de manière incorrecte.". Désolé pour ma supposition là Adam. Merci
Cependant, le reste de ma solution fonctionnera pour ceux qui sont bloqués sur l'utilisation de sources de données dérivées manuellement.
-à-dire
Définissez votre GridView comme ci-dessus, et la note - sans propriété DataSource! Voici mon exemple:
<asp:GridView ID="gvStudents" DataKeyNames="StudentID" runat="server"
ShowFooter="True" AutoGenerateColumns="False" Width="100%" AllowSorting="True" AllowPaging="true" PageSize="10" OnPageIndexChanging="gvStudents_PageIndexChanging">
Suivant faire une méthode privée ou de routine que vous pouvez faire appel à chaque fois que vous devez forcer le gridview sur une nouvelle page.
private void BindGridViewServer(GridView gv1)
{
gv1.DataSource = sdsStudents; //re-attach the datasource
gv1.DataBind(); //get a page of data AllowPaging must be true
}
Ensuite, créez la méthode OnPageIndexChanging
:
protected void gvStudents_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView myGV = (GridView)sender;
myGV.PageIndex = e.NewPageIndex;
BindGridViewServer(myGV);
}
Par souci de compléter cette réponse, voici mon code où je charge les données quand je veux - pas quand un PostPack est tiré, qui est la valeur par défaut ...
protected void btnSEARCH(object sender, EventArgs e)
{
//some code
//bind the gridview to the datasource here and then bind!
gvStudents.DataSource = sdsStudents;
gvStudents.DataBind();
//more code etc
}
Lorsque AllowPaging est False Je pensais que la grille ne se reconnectait pas, elle récupérait simplement les valeurs de viewstate. Êtes-vous en train de dire que je dois lier les données au gridview sur chaque publication lorsque la pagination est activée même si je ne vais pas sur une autre page? Je suis juste en cliquant sur un bouton sur la page. – adam0101
Je pense qu'il existe un moyen de faire en sorte que la grille gère la pagination par elle-même si elle est liée à une source de données via un ID mais qu'il y a une propriété que vous devez définir, même si je pense au pagination de rappel. Laissez-moi vérifier. Sinon oui vous devez généralement gérer manuellement la pagination. –
Après avoir lu ceci: http://blog.tylerholmes.com/2008/06/datasource-vs-datasourceid-internals.html, il semblait que le simple paramétrage de DataSourceID était le déclencheur pour obtenir la grille de données elle-même chaque fois qu'il avait besoin de données. – adam0101