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 :

[C#][2.0] Comment mettre une DropDownList dans le header d'une Gridview ?


Sujet :

ASP.NET

  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Décembre 2005
    Messages : 67
    Par défaut [C#][2.0] Comment mettre une DropDownList dans le header d'une Gridview ?
    Bonjours a tous ,

    voila j'aimerai savoir si c'est possible de mettre une DropDownList dans le header d'une gridview?

    En fait je souhaiterai mettre une DDL sur chaques colonnes pour avoir une fontion de filtre.

    j'arrive pas a positionner mes DDL en face de chaques colonnes, j'ai essayer avec une table html juste au dessus mais la taille des colonnes et des DDL ne correspondent pas, suivant les enregistrements la taille des colonnes du gridview varie. Donc j'aimerai soit :
    - Reussir a faire varier la taille de mes DDL en fontion de la taille des colonnes du GridView
    - soit Integrer mes DDL aux entetes de colonnes du GridView.

    voila si quelqu'un a une idée?

    Merci!

  2. #2
    Membre averti
    Inscrit en
    Septembre 2003
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 60
    Par défaut
    Bonjour,

    Je vais essayer de répondre à tes deux interrogations
    Citation Envoyé par elkamy
    - Reussir a faire varier la taille de mes DDL en fontion de la taille des colonnes du GridView
    Moi, j'inverserais le problème en définissant une taille pour les colonnes du GridView, et en reprenANT la même pour celles de La table HTML...

    Citation Envoyé par elkamy
    - soit Integrer mes DDL aux entetes de colonnes du GridView.
    Pour ça, par contre, je pense qu'il faut t'abonner à l'évènement OnRowDatabound du Gridview, et de créer et remplir tes Ddl à ce moment là.
    Exemple (pas tester, mais ça devrait te donner une piste )
    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
        protected void gdvMyGridview_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            DropDownList ddl;
     
            if (e.Row.RowType == DataControlRowType.Header)
            {
                foreach (TableHeaderCell cell in e.Row.Cells)
                {
                    ddl = new DropDownList();
                    ddl.DataSource = MaSource;
                    ddl.DataBind();
                    ddl.SelectedIndexChanged += new EventHandler(ddl_SelectedIndexChanged);
     
                    cell.Controls.Add(ddl);
                }
            }
        }
    Ce code vérifie que la ligne est bien la ligne d'entête, et ensuite pour chaque cellule j'initialise une nouvelle DDL que je remplis, et au passage je l'abonne à l'évènement SelectedIndexChanged... Bon par contre, pour l'instant tu auras la même DDL dans chaque colonne...

    Il existe encore une autre solution... qui est d'utiliser non pas des colonnes auto générés, mais des colonnes que tu auras définis dans le designer, et dans ce cas tu dois avoir accés à la cellule entête... il ne te restera plus qu'à mettre ta DDL et à la remplir

  3. #3
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Décembre 2005
    Messages : 67
    Par défaut
    Merci beaucoup Raduris , je venais de trouver avant de voir ton post. Mais ca se rapproche de ta solution .

    Donc voila, ici on ajoute simplement une DropDownList.

    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
     
    protected void MaGridView_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            // Si la ligne est de type HEADER
            if (e.Row.RowType == DataControlRowType.Header)
            {
              // Ma DropDownList à ajouter
              DropDownList MaDDL =new DropDownList();
     
              // Creation de la cellule contenant ma DDl
              TableCell MyTable = new TableCell();
              MyTable.Controls.Add(MaDDl);
              MaDDl.ID = "IdDuControle";
              MaDDl.EnableViewState = true;
              MaDDl.AutoPostBack = true;
              MaDDl.SelectedIndexChanged += new eventHandler(OnDropDownListChanged);
     
              // Nouvelle ligne de type header dans mon GridView
              GridViewRow rowHeader = new GridViewRow(0, 0, DataControlRowType.Header, DataControlRowState.Normal);
     
              // Ajout de ma cellule contenant mon controle, a la ligne
              rowHeader.Cells.Add(MyTable);
              rowHeader.Visible = true;
     
              // Ajout de la ligne a mon GridView
              MaGridView.Controls[0].Controls.AddAt(1, rowHeader);
            }
    }
    Donc voilà , c'est cool !

    Merci encore Raduris !

    Juste un petit truc encore:

    Ya t'il moyen de rendre le gridview visible (avec le header) lorsqu'il n'y a pas de données? (C'est bizar qu'il ne reste pas visible )

  4. #4
    Membre Expert
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Par défaut
    Citation Envoyé par elkamy
    Ya t'il moyen de rendre le gridview visible (avec le header) lorsqu'il n'y a pas de données? (C'est bizar qu'il ne reste pas visible )
    Biensure que c'est possible, Si ton GridView est vide alors c'est la template de EmptyData qui est affiché, donc il faut la modifier et ajouter ta DDL ( EditTemplates=> Display : EmptyDataTemplate)

  5. #5
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Décembre 2005
    Messages : 67
    Par défaut
    Ok! mais cela gardera pas mes entetes ?

    Merci

  6. #6
    Membre Expert
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Par défaut
    non je ne crois pas, le but de EmptyData template est d'afficher un message une image pour dire que le GridView est vide, mais tu peux le formater comme tu le veux.

  7. #7
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Décembre 2005
    Messages : 67
    Par défaut
    Oué donc moi je voudrai garder mes entêtes donc pour l'instant je fais comme ca:

    Je regarde si le gridview contient des lignes

    Si il n'en a pas , je rajoute une ligne vide (DBNull.value)

    et ensuite je masque la ligne.

    GridView.rows[0].visible=false

    Voilà , ca marche mais c'est pas super propre je trouve.

    Merci en tout cas a toi mehdi_tn !

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/11/2014, 16h44
  2. Réponses: 0
    Dernier message: 24/05/2010, 22h41
  3. Réponses: 2
    Dernier message: 23/05/2010, 12h45
  4. Réponses: 13
    Dernier message: 03/10/2007, 11h25
  5. [2.0] Mettre une Checkbox dans le header d'une colonne d'une DatagridView
    Par aurelien.tournier dans le forum Windows Forms
    Réponses: 5
    Dernier message: 23/01/2007, 10h27

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