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 :

Checkbox sur un gridview paginé et filtré


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 29
    Par défaut Checkbox sur un gridview paginé et filtré
    Bonsoir,

    Je m'adresse à vous car je me trouve face à un problème (apparament déjà soulevé mais resté sans réponse dans les forums développez...)

    Voici le contexte :
    J'ai un gridview paginé, qui renvoie une liste d'éléments (des produits en l'occurence). J'ai mis en place un système qui permet de filtrer cette liste (en restreignant la liste par le libellé des produits par exemple).
    Je peux donc avoir à l'écran une liste complète, ou restreinte, toujours paginée (selon le nombre de résultats de la requête).

    Le but de la manoeuvre :
    Chaque ligne est dotée en ItemTemplate d'une checkbox, qui lorsqu'elles sont cochées, stockent dans un array en session l'id des produits checkés. Cette sauvegarde intervient au moment du changement de page dans la pagination.

    Le problème :
    Ma fonction de récupération des produits checkés fonctionne sur une liste complète, mais pas sur une liste filtrée.
    Voici mon code :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    Protected Sub ValideCheckbox()
            Dim ArrayList As New ArrayList()
     
            If Not Session("CHECKED_ITEMS") Is Nothing Then
                ArrayList = Session("CHECKED_ITEMS")
            End If
     
            For Each row As GridViewRow In GVProduit.Rows
     
                Dim Cbox As New System.Web.UI.WebControls.CheckBox
                Dim PrdIdTexte As New System.Web.UI.WebControls.Label
     
                Cbox = row.FindControl("CbSelected")
                PrdIdTexte = row.FindControl("lblIdProd")
     
                If Cbox.Checked = True Then
     
                    If ArrayList.Contains(PrdIdTexte.Text) Then
                        'Rien pour le moment
                    Else
                        ArrayList.Add(PrdIdTexte.Text)
                    End If
                Else
                    ArrayList.Remove(PrdIdTexte.Text)
                End If
     
            Next
            Session("CHECKED_ITEMS") = ArrayList
        End Sub
    Sur une liste complète, la ligne "If Cbox.Checked = True Then" passe correctement. Sur une liste filtrée, même si la checkbox est checkée, le moteur va directement sur le "Else"

    Je peux vous donner une autre partie du code si vous en avez besoin, et d'autres explications.

    Merci de votre aide!

  2. #2
    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
    Je pense que le DataGrid est rebindé avant que tu passes dans ta fonction et donc tu perds tes cases cochées.

    Sinon, Cbox.Checked = true c'est redondant.
    If Cbox.Checked Then c'est mieux

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 29
    Par défaut
    Comment dois-je faire alors?
    Dois-je exécuter ma fonction sur un autre évènement, en amont de rebind?
    Si oui, sur quel évènement? (je viens de tester le PageIndexChanging du GridView, rien ne change)

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 29
    Par défaut
    Elément supplémentaire :

    Lorsque je ne binde pas, le checkbox est effectivement reconnu checked, mais la référence du produit n'est pas celle effectivement cochée, mais est celle du produit à cet endroit dans la liste complète et non filtrée...

    Une idée?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 29
    Par défaut
    Je termine mon monologue :
    Je n'ai pas trouvé la solution sur le net alors j'ai opté pour une méthode maison...
    Voici comment je procède :

    Je fais deux passes en for each de mon gridview.
    Une première passe sans binder : les checkbox sont bien reconnues checkées, donc je stocke dans un tableau temporaire l'index des checkbox cochées, et une deuxième passe, après un databind : les id des produits sont alors les bons.

    En fonction de mon tableau temporaire et des references des produits je fais un croisement et je retrouve mes bons produits...
    Galère.

    Merci à vous
    Bonne journée

Discussions similaires

  1. Pagination bloquée sur un GridView
    Par Delphi-ne dans le forum ASP.NET
    Réponses: 3
    Dernier message: 21/11/2012, 10h44
  2. [1.x] [sfPager][sfFilter] Pagination et Filtre sur le Frontend
    Par guiyomh dans le forum Symfony
    Réponses: 6
    Dernier message: 31/10/2010, 00h23
  3. Réponses: 2
    Dernier message: 15/12/2009, 17h45
  4. Réponses: 7
    Dernier message: 07/11/2006, 16h23
  5. Réponses: 2
    Dernier message: 19/02/2006, 12h46

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