IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

GridView - Gestion de la pagination sans ObjectDataSource


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Johann7751
    Profil pro
    Analyste Programmeur Junior
    Inscrit en
    Février 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur Junior

    Informations forums :
    Inscription : Février 2009
    Messages : 234
    Par défaut GridView - Gestion de la pagination sans ObjectDataSource
    Bonjour,

    J'ai une GridView que j'affiche en mode page.

    La source de données de ma GridView n'est pas un ObjectDataSource où quelque chose du genre c'est à dire que ma GridView n'a pas de propriété DataSourceID

    En fait, ma source de données est une liste d'objets.
    Je récupère les données sous forme d'une liste d'objets que je bind à mon GridView dans le code behind :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    List<objet> maListe = new List<objet<();
     
    maListe = / * DONNEES */
     
    monGridView.DataSource = maListe;
    monGridView.DataBind();

    Sachant que ma source de données est de ce type, comment gérer la pagination de mon GridView ?

    Là j'ai mon GridView avec ses données, j'ai mes numéros en dessous de la GridView pour gérer la pagination, mais quand je clique sur les numéros, il ne se passe rien c'est à dire que c'est toujours la 1ère page de mon GridView qui est affichée.
    Quand je clique sur un des n° de la pagination, je dois gérer l'évènement PageIndexChanging, j'essaye de modifier le PageIndex mais sans succès,


    un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    protected void gvDisplayRange_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvDisplayRange.PageIndex = e.NewPageIndex;
        }
    c'est toujours la 1ere page qui s'affiche. Bref ..



    Merci de votre aide.

  2. #2
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Par défaut
    Heu, si tu fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    monGridView.DataSource = maListe;
    monGridView.DataBind();
    C'est que tu n'utilises pas un ObjectDataSource. Il existe de nombreux tutos sur le web sur comment gérer la pagination. Que ce soit en Bindant manuellement une collection comme tu le fais, ou en utilisant une ObjectDataSource. Il y a également des bouts de code en exemple sur chaque page MSDN qui décrit ces différents concepts...

  3. #3
    Membre éclairé Avatar de Johann7751
    Profil pro
    Analyste Programmeur Junior
    Inscrit en
    Février 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur Junior

    Informations forums :
    Inscription : Février 2009
    Messages : 234
    Par défaut
    Je n'ai pas encore trouvé de tuto ou d'exemple qui expliquait comment gérer la pagination de GridView avec une source de données liée manuellement.
    A chaque fois, la source de données est un ObjectDatSource..

    As tu des liens ?

  4. #4
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    Voila un exemple de manière dont tu peux implémenter une pagination manuelle sur ta grid : ici

  5. #5
    Membre Expert Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Par défaut
    Ta pagination va avoir lieu lorsque tu vas faire tes appels à ta base de données. C'est donc dans cette couche qu'il faudra s'en occuper.

    Maintenant, la réponse à ta question dépend de la façon dont tu t'y prends pour récupérer tes données.

    Utilises tu Linq to sql? Linq to Entities? un appel à une requête sql ou un procédure directement dans ton code?

  6. #6
    Membre éclairé Avatar de Johann7751
    Profil pro
    Analyste Programmeur Junior
    Inscrit en
    Février 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur Junior

    Informations forums :
    Inscription : Février 2009
    Messages : 234
    Par défaut
    Je pense que c'est bon. J'avais oublié de re-bind la source de données après le changement d'index de la page.

    Pour récupérer ma source de données dans mon évènement PageIndexChanging, j'utilise une variable de session (_currentListObjet) que j'initialise au moment où je récupère mes données.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    protected void gvDisplayRange_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvDisplayRange.PageIndex = e.NewPageIndex;
            gvDisplayRange.DataSource = _currentListObjet;
            gvDisplayRange.DataBind();
     
        }
    Merci à tous.





    Par contre un truc à savoir c'est que le fait d'appuyer sur un des n° en dessous du GridView pour gérer la pagination déclenche l'évènement OnRowCommand.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    protected void gvDisplayRange_RowCommand(object sender, GridViewCommandEventArgs e)
    {
    }
    Quand on appuie sur un des n° de pagination, la valeur de la propriété CommandName de GridViewCommandEventArgs :

    est égale à "Page".

    C'est utile de savoir cela dans mon cas car j'utilise déjà l'évènement OnRowCommand pour effectuer un traitement et je ne veux pas que ce traitement soit réalisé lorsque j'effectue de la pagination.
    Une conditionnelle sur e.CommandName et c'est réglé.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 11
    Dernier message: 28/07/2009, 14h09
  2. [MySQL] Une sorte de pagination sans BDD
    Par Eroik dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 20/07/2007, 18h30
  3. gestion de la pagination
    Par imane_bennouna dans le forum Struts 1
    Réponses: 5
    Dernier message: 02/08/2006, 10h38
  4. gestion des Services Windows sans .NET
    Par zedoo dans le forum MFC
    Réponses: 1
    Dernier message: 16/05/2005, 23h52
  5. Gestion d'un programme sans Souris ! ???
    Par altahir007 dans le forum Composants VCL
    Réponses: 7
    Dernier message: 03/04/2003, 11h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo