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 :

Pagination d'un Gridview


Sujet :

ASP.NET

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2010
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2010
    Messages : 98
    Par défaut Pagination d'un Gridview
    Bonjour à tous

    J'ai un probléme pour effectuer la pagination de mon gridview. Quand j'essaie de changer de page il ne m'affiche rien.

    Mon gridviex est allimenté par un dataset

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    //Recupération des champs de recherche
                    String duree_op = Duree_recherche.Text;
                    String annee_op = Annee_recherche.Text;
     
     
                    string[] Valeur_Recherche = new string[] {"%" + recherche_titre.Text + "%",recherche_genre.Text,recherche_duree.Text,recherche_annee.Text,Recherche_public.Text,recherche_visionage.Text,Recherche_Nom_Saga.Text};
                    string[] cle_Recherche = new string[] {"Titre Like","VD.GenreID =","duree " +duree_op,"annee "+annee_op,"Cotation =","Visionner =","Nom_saga ="};
     
                    //Création de la Requête
                    string Video_recherche = "SELECT VD.ID as ID,Titre,G.[Genre] as genre,duree,Cotation,[Nom_Saga] as saga " +
                                             "FROM [VidéoMania].[dbo].[VIDEO_Liste_Video] VD Inner join [VidéoMania].[dbo].[Param_video_genre] G On VD.GenreID = G.ID ";
     
                    Video_recherche = Fonction.RechercheVideo(Valeur_Recherche, cle_Recherche, Video_recherche);
                    Video_recherche = Video_recherche + " Order by N_saga ASC, Nom_Saga ASC, VD.ID ASC";    
     
                    DataSet video_recherche_data = Fonction.construirdataset(Video_recherche);
                    video_resultat.DataSource = video_recherche_data;
                    video_resultat.DataBind();
                    video_resultat.Visible = true;
    Ensuite j'ai eu un message d'erreur comme quoi pageindexchanging n'était pas géré. J'ai rajouté quelque ligne mais qui fonctionne pas

    1ère solution : Mon grid view s'affiche mais la page 1 est idendique à moitié à la page 2.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    video_resultat.PageIndex = e.NewPageIndex;
     
                //Code à revoir
                //Recupération des champs de recherche
                String duree_op = Duree_recherche.Text;
                String annee_op = Annee_recherche.Text;
     
                string[] Valeur_Recherche = new string[] { "%" + recherche_titre.Text + "%", recherche_genre.Text, recherche_duree.Text, recherche_annee.Text, Recherche_public.Text, recherche_visionage.Text, Recherche_Nom_Saga.Text };
    2éme solution : rien ne se page

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    video_resultat.PageIndex = e.NewPageIndex;
                video_resultat.DataBind();
    Si vous avez une idée je suis preneur. J'ai été voir sur MSDN mais il ne donne q'un exemple pour annuler la pagination est pas pour l'effectuer

    Merci d'avance pour votre aide

  2. #2
    Membre extrêmement actif Avatar de cortex024
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 301
    Par défaut
    Bonjour,

    la ligne de code où tu définis le nouvel index de page est correct.

    Mais après tu dois relancer la requête pour remplir ton datasource.
    après cela, un databind.
    il manque donc juste un truc à ta dernière solution.

    si tu veux éviter de relancer la requête, tu peux toujours stocker le résultat

  3. #3
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Vu que c'est du C# j'ai aps tout compris dans le détail.

    La seule chose que je puisse te dire c'est j'ai eu ce problème il n'y a pas longtemps, donc tu aurais du (si tu avais cherché dans le fourm) tomber sur mon topic.

    La solution est simple : le chagement d'index d epage d'une GRidView se fait dans le PageIndexChanging. Dans cet évènement tu place le nouvel index de page et tu recharge :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    gv.PageIndex = e.NewPageIndex
    gv.DataBind()
    C'est super puissant car il ne va chercher que les donnée ont il a besois dans la page du gridView et du coup moins de tranport de données.

    @ +

  4. #4
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Citation Envoyé par zooffy Voir le message
    C'est super puissant car il ne va chercher que les donnée ont il a besois dans la page du gridView et du coup moins de tranport de données.
    @ +
    Nop, il récupère tout à chaque fois

  5. #5
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Citation Envoyé par lutecefalco Voir le message
    Nop, il récupère tout à chaque fois
    Alors va falloir te mettre d'accord ave Nicolas car, visiblement, il ne dit pas la même chose que toi.
    http://www.developpez.net/forums/d94...e/#post5334930

    Moi, j'y connais pas assez, mais je vous fais confiance à tous les deux. Sauf que là, vous lancez une idée contradictoire, alors qui a raison ?



    allez, je pars faire du Kart, en attendant un coup de main sur mon souci de HttpHandler.

    @+

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2010
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2010
    Messages : 98
    Par défaut Demande de renseignement
    Citation Envoyé par lutecefalco Voir le message
    Nop, il récupère tout à chaque fois
    Donc si j'ai bien compris à chaque fois que l'utilisateur change la page il faut que je recalcule les ligne que je retourne.

    Par exemple si mon grid view affiche 10 lignes (propriéte lignesize) et l'utilisateur demande la page 4 il faut que je récupère les lignes 41 à 50 de mon gridview.

    Est ce que c'est la meilleur solution.

    Merci

  7. #7
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Citation Envoyé par zooffy Voir le message
    Alors va falloir te mettre d'accord ave Nicolas car, visiblement, il ne dit pas la même chose que toi.
    http://www.developpez.net/forums/d94...e/#post5334930

    Moi, j'y connais pas assez, mais je vous fais confiance à tous les deux. Sauf que là, vous lancez une idée contradictoire, alors qui a raison ?
    J'ai raison

  8. #8
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Citation Envoyé par charlingals1 Voir le message
    Donc si j'ai bien compris à chaque fois que l'utilisateur change la page il faut que je recalcule les ligne que je retourne.

    Par exemple si mon grid view affiche 10 lignes (propriéte lignesize) et l'utilisateur demande la page 4 il faut que je récupère les lignes 41 à 50 de mon gridview.

    Est ce que c'est la meilleur solution.

    Merci
    Ouais
    Mais à voir si ça vaut vraiment le coup.
    Si t'as que qqs centaines de lignes, ça vaut pas le coup de s'embêter

  9. #9
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Avec le bout de code que j'ai donné, ça le fait tout seul, alors où se trouve le problème ?


    PS : la Kart, c'était génial, je suis à une seconde du record de la piste.

  10. #10
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2010
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2010
    Messages : 98
    Par défaut Toujours un petit problème
    Bonjour

    J'ai essayé que la pagination soit automatique, Pour cela j'ai utiliser SQLdataSource.

    Par contre je suis obligé en code Behin de modifié la valeur de la requête car c'est l'utilisateur qui rentre les coditions.
    Donc je code ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    masourcededonnée.selectcommand = marequete
    Ca me retourne une erreur comme quoi j'ai dépasser le nombre maximum à passer dans le httpform qui est de 3 maximum.

    J'ai pas essayer d'aller plus loin

    Par contre sur mon autre hypothèse. Je ne sais pas comment récupérer un groupe de lignes dans le dataset.

    Cordialement

  11. #11
    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
    Citation Envoyé par lutecefalco Voir le message
    J'ai raison
    Ca dépend le contexte

    Si la pagination est mise en place avec une méthode supportant startIndexRow et rowCount en paramètre... il ne ramène pas tout à chaque fois.

  12. #12
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Citation Envoyé par zooffy Voir le message
    Avec le bout de code que j'ai donné, ça le fait tout seul, alors où se trouve le problème ?
    De quoi tu parles?

  13. #13
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Citation Envoyé par Nicolas Esprit Voir le message
    Ca dépend le contexte

    Si la pagination est mise en place avec une méthode supportant startIndexRow et rowCount en paramètre... il ne ramène pas tout à chaque fois.
    Ca fait un sacré "si" qd même

  14. #14
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2010
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2010
    Messages : 98
    Par défaut
    Bonjour

    Je pense que la pagination est faites automatiquement de même pour le tri, lorsque la source de donnée est une SQLdatasource (ou une autre) mais elle doit se trouver directement sur la page ASPX (Pour les propriétés utilisées où pas je ne sais pas du tout).

    Dans mon cas, je ne peux pas, est tant donné qu'il s'agit d'un écran de recherche, j'effectue ma requête sur les critéres de l'utilisateur, je construit mon dataset puis je l'affecte à mon gridview.

    Cependant le temps de trouver une solution à la pagination j'ai afficher toutes les lignes (c'est vraiment pas propre) mais au moin l'utilisateur à toutes les infos

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    video_resultat.PageSize = video_recherche_data.Tables[0].Rows.Count;
    Si quelqu'un à une solution soit en utilisant comme source un dataset ou une autre (Pour information je suis sur une base de donnée sur SQL server 2008 R2)

    Cordialement

  15. #15
    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
    Citation Envoyé par lutecefalco Voir le message
    Ca fait un sacré "si" qd même


    Charge à nous de transmettre la bonne parole. Donc, à tous ceux qui ne sont pas à l'aise avec le concept, lisez ceci (notamment les remarques sur fond jaune).

  16. #16
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2010
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2010
    Messages : 98
    Par défaut
    Bonjour

    J'ai réussis à effectuer la pagination de mon grid view est cela marche nickel.

    Voici comment j'ai fait

    Première étape je déclare un dataset globale à ma page pour effectuer ma recherche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    static DataSet video_recherche_data = new DataSet();
    Ensuite je lui affecte les valeur lorque l'utilisateur lance la recherche

    Est pour terminer dans l'événement de pagination (indexpaging)

    je recréer mon gridview tout simplement en changant la page

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    video_resultat.PageIndex = e.NewPageIndex;
                video_resultat.DataSource = video_recherche_data;
                video_resultat.DataBind();
    3 lignes et je me suis pris la tête dessus.

    Je vous remercie à tous pour votre aide

    Cordialement

  17. #17
    Membre extrêmement actif Avatar de cortex024
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 301
    Par défaut
    Bonjour.

    je t'avais donné la réponse au premier message tout de même
    je ne comprends pas pourquoi personne ne l'a lu!

    Citation Envoyé par cortex024 Voir le message
    Bonjour,

    la ligne de code où tu définis le nouvel index de page est correct.

    Mais après tu dois relancer la requête pour remplir ton datasource.
    après cela, un databind.
    il manque donc juste un truc à ta dernière solution.

    si tu veux éviter de relancer la requête, tu peux toujours stocker le résultat

  18. #18
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Citation Envoyé par lutecefalco Voir le message
    De quoi tu parles?
    Des deux lignes de code que j'ai filé plus bas. L'index et le DataBind à mettre dans le bon event.

    Citation Envoyé par Nicolas Esprit Voir le message
    Ca dépend le contexte

    Si la pagination est mise en place avec une méthode supportant startIndexRow et rowCount en paramètre... il ne ramène pas tout à chaque fois.
    Tu avais peut être oublié de me parler de ça dans ton message cité en référence ?
    Du coup, avec nu SQLDataSource, ça le fait ?


    @charlingals1 :
    Je suis pas aussi calé que les deux montres qui viennent d'entrer dans le topic, mais j'ai un peu de mal à comprendre.
    Si j'ai bien comrpis ton système : tu as besoins d'un GridView avec la paginatian qui prend une source de donnée sur laquelle l'utilisateur à appliqué des critères de recherche.

    Donc l'utilisateur dispose d'un formulaire au dessus de ton GridView. Alors pour ne pas utiliser un SQLDataSource avec des paramettres (vu qu'il y en a ) et envoyer tout ça. Si j'ai bien suivi, avec un SQLDataSource y a pas mal de trucs qui se font tout seul.

    Je laisse le soin à LuteceFalco et Nicolas de contre dire mon propos, mais sur ce coup, à force de les écouter (ces deux là) j'ai fini par apprendre des trucs, et donc je epnse que je suis sur la bonne piste.

  19. #19
    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
    Citation Envoyé par zooffy Voir le message
    Tu avais peut être oublié de me parler de ça dans ton message cité en référence ?
    Du coup, avec nu SQLDataSource, ça le fait ?
    Oui, c'est ma faute, sorry
    Dans ma tête Pagination vient d'emblée avec une ObjectDataSource, et je n'ai pas pensé à préciser tous les aspects.

    Donc pour voir rapidement les différences entre SQLDataSource et ObjectDataSource tu peux lire cet article.

    Ensuite pour les différences concernant le Default Paging (SQLDataSource, utilisation du cache) et le Custom Paging, tu peux consulter cet article qui est très détaillé et montre les performances des différentes solutions possibles.

    En espérant t'avoir aidé.

  20. #20
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2010
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2010
    Messages : 98
    Par défaut
    Bonjour

    Citation Envoyé par zooffy Voir le message
    Alors pour ne pas utiliser un SQLDataSource avec des paramettres (vu qu'il y en a ) et envoyer tout ça. Si j'ai bien suivi, avec un SQLDataSource y a pas mal de trucs qui se font tout seul.
    Je ne savais pas que l'on pouver mettre des paramètres sur un SQLDATAsource, si je l'aurai su j'aurai essayer.

    Dans mon cas, (formulaire de recherche, ou l'utilisateur saisie les critères), j'ai opté pour le dataset (parce que je connaissais principalement et surtout pour éviter des aller retour server, qui peuvent être important (en nombre mais également en quantité)

    J'ai appliqué la méthode du dataset, si vous connaissez une meilleur solution plus optimisé.

    Cordialement

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

Discussions similaires

  1. Pagination manuelle avec gridview
    Par trihanhcie dans le forum ASP.NET
    Réponses: 1
    Dernier message: 22/03/2010, 19h51
  2. Mémoriser le N° de pagination d'un Gridview
    Par kheironn dans le forum ASP.NET
    Réponses: 2
    Dernier message: 13/06/2007, 10h51
  3. Problème de pagination avec un GridView
    Par Perceuse-Killer dans le forum ASP.NET
    Réponses: 2
    Dernier message: 07/02/2007, 13h30
  4. Réponses: 1
    Dernier message: 27/09/2006, 09h28
  5. [C#] Comment gérer la pagination avec un GridView ?
    Par appwnet dans le forum ASP.NET
    Réponses: 5
    Dernier message: 05/05/2006, 13h47

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