2009-10-21 6 views
0

J'utilise C#, .NET 3.5. J'ai un contrôle GridView avec DataSource lié dynamiquement et j'ai défini dynamiquement le PageSize dans le gestionnaire d'événements Page_Load. J'ai défini AllowPaging = true sur le contrôle. La pagination GridView fonctionne correctement, mais la mise en page définie dans Page_Load ne prend pas effet la première fois que la page est chargée. La première fois que la page est chargée, il affichera toujours 10 lignes indépendamment de la propriété GridView.PageSize que j'ai définie (5, 15 etc). Après la 1ère fois (publication de page), la taille de la page prend effet et tout fonctionne comme prévu.GridView.PageSize défini sur la valeur par défaut 10 lors du chargement de la première page

La taille de page est une propriété de la page principale que je reçois du fichier web.Config sous appsettings.

Je ne sais pas pourquoi la mise en page de gridView ne prend pas effet la première fois. Dois-je définir la taille de la page dans un autre événement autre que le Page_Load. Aussi, je le mets toujours, même si c'est un postback. Je cours la page en utilisant le serveur Web interne. Une idée de ce qui se passe?

Code

derrière (GridView1.AllowPaging = true à la page ASPX):

protected void Page_Load(object sender, System.EventArgs e) 
    { 
         DataView dvMembers = GetMembers; 

         GridView1.DataSource = dvMembers; 
         GridView1.PageSize = Master.GridViewSize; 
    } 

maître propriété page:

public int GridViewSize 
    { 
     get { return Convert.ToInt32 
       (ConfigurationManager.AppSettings ["memberDataGridPageSize"]); } 
    } 

Répondre

2

L'événement PageLoad de votre page enfant est appelé avant l'événement PageLoad de votre la page principale. Par conséquent, si vous définissez Master.GridViewSize dans l'événement PageLoad de la page maître, il n'est pas défini avant le second PostBack.

Il serait préférable de charger le GridViewSize au début du cycle de vie de la page, puis de le stocker dans la session.

+0

Master.GridViewSize est une propriété de la page maître et n'est pas définie dans l'événement Page_Load. Et quand je débogue la page de contenu pour voir sa valeur dans le gestionnaire d'événements Page_Load, il est déjà défini. Donc je ne pense pas que ce soit le problème. À quel événement pensez-vous que je devrais définir la taille de la page de grille? – Pritika

+0

Si la valeur est définie la première fois, ce n'est pas le problème. Que se passe-t-il si vous codez en dur un PageSize? –

+0

Aussi, où est votre appel à GridView1.DataBind() ou Page.DataBind()? –

0

Dans votre définition de pagination, GridView est défini sur la première liaison de données mais pas sur la seconde si une publication est effectuée (par défaut, aucune pagination) Vous devez définir la pagination pour GridView sur la page aspx.

Essayez comme ça

<asp:GridView ID="GridView1" PageSize='<%$ AppSettings:memberDataGridPageSize %>' ..> 

Sachez également que si vous exécutez projet ASP.NET 3.5, vous pouvez utiliser DataPager contrôle à l'extension GridView, il est un exemple Matt Berseth développé here.

+0

Je définis la taille de la page et la source de données dans le gestionnaire d'événements Page_load, qu'il s'agisse d'une publication ou non. Donc je ne sais pas pourquoi il y a une différence entre la 1ère fois et les postbacks. Merci pour votre suggestion d'insérer la page dans le code ASPX lui-même, mais je voudrais savoir ce qui se passe avec mon code actuel lorsque je place la page dans le code derrière. – Pritika

0

La méthode PageBind manquait après la définition de la taille de la page. Ajoutant cela et tout fonctionne bien. Je liais le contrôle avant de définir le PageSize et je suppose que cette valeur a été enregistrée après la 1ère fois et utilisée par la suite sur Postback mais pas la première fois.

Merci Jason Berkan d'avoir signalé cela.

+0

N'hésitez pas à accepter cette réponse, de sorte que les personnes postérieures qui cherchent sur cette question peuvent facilement trouver la réponse. –

+0

Vous devez accepter une réponse si vous avez une solution pour cela. – Myra

Questions connexes