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 :

Cacher une colonne d'un GridView


Sujet :

ASP.NET

  1. #1
    Membre extrêmement actif
    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 : 54
    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
    Points : 1 434
    Points
    1 434
    Par défaut Cacher une colonne d'un GridView
    Bonjour tout le monde.

    Je crois que ce que je veux faire n'est aps possible, mais je voudrais m'en assurer auprés de vous.

    J'ai un GridView monté par le CodeBehind. Je l'ai laisssé en mode automatique pour le montage des colonnes.
    Je voudrais "cacher" la première colonne mais il ne veut pas. J'ai mis ça dans le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Columns(0).Visible = False
    et il me dit :
    L'index était hors limites. Il ne doit pas être négatif et doit être inférieur à la taille de la collection.
    Nom du paramètre : index
    Alors je comprends pas bien. Je fais ça aprés le DataBind pour êre sûr qu'il soit rempli au moment où je lui dit de cacher la colonne.

    Evidement je pourrais mettre le mode automatique à False et fabriquer mes colonne à la main (et en plus je sais le faire !) mais je voulais m'épargner du code sur ce coup là.

    Avez vous une idée ?

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Points : 295
    Points
    295
    Par défaut
    Je crois que ce que je veux faire n'est aps possible, mais je voudrais m'en assurer auprés de vous.
    Non je l'ai déja fait ca marche très bien...

    La je vois pas pourquoi dans ton cas ca ne marche pas...

  3. #3
    Membre régulier Avatar de dachir
    Inscrit en
    Juillet 2006
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 148
    Points : 70
    Points
    70
    Par défaut
    Citation Envoyé par zooffy Voir le message
    Bonjour tout le monde.

    Je crois que ce que je veux faire n'est aps possible, mais je voudrais m'en assurer auprés de vous.

    J'ai un GridView monté par le CodeBehind. Je l'ai laisssé en mode automatique pour le montage des colonnes.
    Je voudrais "cacher" la première colonne mais il ne veut pas. J'ai mis ça dans le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Columns(0).Visible = False
    et il me dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    L'index était hors limites. Il ne doit pas être négatif et doit être inférieur à la taille de la collection.
    Nom du paramètre : index
    Alors je comprends pas bien. Je fais ça aprés le DataBind pour êre sûr qu'il soit rempli au moment où je lui dit de cacher la colonne.

    Evidement je pourrais mettre le mode automatique à False et fabriquer mes colonne à la main (et en plus je sais le faire !) mais je voulais m'épargner du code sur ce coup là.

    Avez vous une idée ?
    Sur l'évenement Rowdatabound de la gridview ou rowcreated ajoute ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     e.Row.Cells(0).Visible = False
    J'espère t'avoir été utile

  4. #4
    Nouveau membre du Club
    Profil pro
    Chef-balayeur
    Inscrit en
    Octobre 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef-balayeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 28
    Points : 29
    Points
    29
    Par défaut Cacher une colonne dans une GridView via CSS
    Indépendamment des problèmes d'indice, il me semble que le fait de mettre Visible à False implique que les données de la colonne ne seront pas envoyées au navigateur (le tableau HTML ne contiendra pas cette colonne).

    Si le but est de cacher la colonne, mais avec les données quand même dispo sur le navigateur (parce qu'on a besoin d'y accéder via Javascript, par exemple), il faut passer par les CSS.

    Voici un exemple de ce que j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Sub MaGridViewAMoiPerso_RowCreated(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
    	If e.Row.RowType = DataControlRowType.DataRow _
    	   or e.Row.RowType = DataControlRowType.Header Then
    		e.Row.Cells(6).CssClass = "hidden"
    	Next
    End Sub
    Avec quelque part, le style suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    .hidden
    {
    	display:none;
    }

  5. #5
    Membre régulier Avatar de dachir
    Inscrit en
    Juillet 2006
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 148
    Points : 70
    Points
    70
    Par défaut
    Citation Envoyé par Lino Léum Voir le message
    Indépendamment des problèmes d'indice, il me semble que le fait de mettre Visible à False implique que les données de la colonne ne seront pas envoyées au navigateur (le tableau HTML ne contiendra pas cette colonne).

    Si le but est de cacher la colonne, mais avec les données quand même dispo sur le navigateur (parce qu'on a besoin d'y accéder via Javascript, par exemple), il faut passer par les CSS.

    Voici un exemple de ce que j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Sub MaGridViewAMoiPerso_RowCreated(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
    	If e.Row.RowType = DataControlRowType.DataRow _
    	   or e.Row.RowType = DataControlRowType.Header Then
    		e.Row.Cells(6).CssClass = "hidden"
    	Next
    End Sub
    Avec quelque part, le style suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    .hidden
    {
    	display:none;
    }
    Si tel est le cas, autant ne pas faire apparaitre la colonne dans la gridview des le départ mais cacher l'information dans un hiddenfield dans une des colonne disponible. On pourra plus tard acceder a l'information cachée dans la hiddenield.

  6. #6
    Nouveau membre du Club
    Profil pro
    Chef-balayeur
    Inscrit en
    Octobre 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef-balayeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 28
    Points : 29
    Points
    29
    Par défaut
    C'est effectiveement une autre option.
    Mais que ce soit la colonne complète ou un contrôle dans une colonne visible qui est caché, je ne suis pas sûr que l'un soit supérieur à l'autre.

    Mais je suis volontiers à l'écoute d'arguments percutants.

  7. #7
    Membre extrêmement actif
    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 : 54
    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
    Points : 1 434
    Points
    1 434
    Par défaut
    Ben voilà tout mon bloc With sur le GV, peut être verras tu un truc qui te choque. Je peut te dire aussi que le GV est délarer en haut de la classe en Private et que le bloc de code ci dessous est dans Page_Init.
    Sinon, je vois pas.

    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
     
    With gvResult
                Dim keys As New System.Collections.Generic.List(Of String)
                keys.Add("UserId")
                .DataKeyNames = keys.ToArray()
                .AutoGenerateColumns = True
                .AllowPaging = True
                With .PagerSettings
                    .Mode = PagerButtons.NextPreviousFirstLast
                    .LastPageText = "Dernière"
                    .NextPageText = "Suivante"
                    .PreviousPageText = "Précédente"
                    .FirstPageText = "Première"
                End With
                .Width = Unit.Percentage(100)
                .PageSize = 25
                .Columns(0).Visible = False
                .DataSourceID = "sdsResult"
                .DataBind()
     
            End With

  8. #8
    Membre régulier Avatar de dachir
    Inscrit en
    Juillet 2006
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 148
    Points : 70
    Points
    70
    Par défaut
    Citation Envoyé par zooffy Voir le message
    Ben voilà tout mon bloc With sur le GV, peut être verras tu un truc qui te choque. Je peut te dire aussi que le GV est délarer en haut de la classe en Private et que le bloc de code ci dessous est dans Page_Init.
    Sinon, je vois pas.

    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
     
    With gvResult
                Dim keys As New System.Collections.Generic.List(Of String)
                keys.Add("UserId")
                .DataKeyNames = keys.ToArray()
                .AutoGenerateColumns = True
                .AllowPaging = True
                With .PagerSettings
                    .Mode = PagerButtons.NextPreviousFirstLast
                    .LastPageText = "Dernière"
                    .NextPageText = "Suivante"
                    .PreviousPageText = "Précédente"
                    .FirstPageText = "Première"
                End With
                .Width = Unit.Percentage(100)
                .PageSize = 25
                .Columns(0).Visible = False
                .DataSourceID = "sdsResult"
                .DataBind()
     
            End With
    Je me dis (sans trop tester bien sur) qu'au moment de l'initialisation de la page, les colonne de la GV n'existe pas, c'est ce qui probablement plante l'application. essaie de masquer la colonne dans le rowcreated ou rowdatabound comme spécifier plus haut.

  9. #9
    Membre extrêmement actif
    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 : 54
    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
    Points : 1 434
    Points
    1 434
    Par défaut
    Je vians d'esayer les deux en ajoutant les AddHandler qui vont bien et j'ai le même résultat.

    Par extension, je me suis dit que l'évènement de page était mal choisi et jai donc essayé avec le Page_Load, vu qu'il est aprés le Page_Init, et j'ai toujours le même résultat.

    Une autre idée ?

  10. #10
    Membre régulier Avatar de dachir
    Inscrit en
    Juillet 2006
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 148
    Points : 70
    Points
    70
    Par défaut
    Citation Envoyé par zooffy Voir le message
    Je vians d'esayer les deux en ajoutant les AddHandler qui vont bien et j'ai le même résultat.

    Par extension, je me suis dit que l'évènement de page était mal choisi et jai donc essayé avec le Page_Load, vu qu'il est aprés le Page_Init, et j'ai toujours le même résultat.

    Une autre idée ?
    En effet tu vires du coté obscur mon ami, essaie donc le rowdatabound ou rowcreted pour changer. Ou il ya une raison particulière avouloir faire comme tu l'entends

  11. #11
    Membre extrêmement actif
    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 : 54
    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
    Points : 1 434
    Points
    1 434
    Par défaut
    Ben j'ai du mal à te suivre, c'est justement ce que j'ai fait et en plus j'ai essayé le Page_Load.

  12. #12
    Membre extrêmement actif
    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 : 54
    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
    Points : 1 434
    Points
    1 434
    Par défaut
    Je viens de découvrir les intervention de Lino Léum. Pour une raison que j'ignore, ces interventions n'étaient pas là lorsque j'ai placé mon bloc Wtih en entier. Bref, passon sur les petits soucis technique que le forum rencontre parfois.

    Le coup de mettre avec du CSS, oui, j'y ai pensé, j'ai même fais ça il y a deux ans, parce que j'étais pressé. Mais là, je voudrais faire un truc propre.

    L'idée c'est de dire : j'ai un GridView, il se fabrique tout seul, mais j'affiche pas la première colonne (ou une autre) et de faire tout ça en utilisant les méthodes fournies par le FrameWork

    Même si ton idée est bonne, Lino Léum, elle fait encore trop "bricolage". Si je prends ça, je vais être obligé de maintenir une classe CSS dans tous mes sites, penser à la répercuter à chaque fois que je vais mettre un GridView dans les mêmes conditions, bref l'avenir ne parait pas simple avec cette méthode.

  13. #13
    Membre extrêmement actif
    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 : 54
    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
    Points : 1 434
    Points
    1 434
    Par défaut
    J'ai fait un test qui a un résultat bizarre. J'ai cherché àcompter le nombre de colonne de mon GridView et je trouve : 0 !!!

    J'ai fait le test tout simple dans le Page_Load :
    .

    AVez vous une idée d'où peut provenir cette absence de colonne ?

  14. #14
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Points : 295
    Points
    295
    Par défaut
    Fait d'abord un gridview.databind() et ensuite tu comptes

  15. #15
    Membre extrêmement actif
    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 : 54
    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
    Points : 1 434
    Points
    1 434
    Par défaut
    Alors j'ai refais la même chose juste apés le Databind(), qui est là depuis le départ, et j'ai toujours 0 !

    Là je comprends plus rien.

Discussions similaires

  1. [C#] Comment cacher une colonne d'un GridView ?
    Par dumser1 dans le forum ASP.NET
    Réponses: 15
    Dernier message: 11/12/2009, 16h58
  2. Réponses: 7
    Dernier message: 25/05/2007, 11h40
  3. Cacher une colonne
    Par lapart dans le forum AWT/Swing
    Réponses: 19
    Dernier message: 27/02/2007, 10h59
  4. Réponses: 4
    Dernier message: 30/06/2006, 16h26
  5. [C#] Cacher une colonne d'une dataGrid
    Par royrremi dans le forum ASP.NET
    Réponses: 2
    Dernier message: 27/05/2004, 17h00

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