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 :

Comment customiser un GridView ?


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de blasil64
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 324
    Par défaut Comment customiser un GridView ?
    Bonsoir à tous,
    J'ai mon GridView pour gérer les avis mis par les utilisateurs sur les films dans ma partie administration. Au niveau de l'affichage du GridView, je souhaite le personnaliser afin d'afficher le titre des films et le pseudo des utilisateurs au lieu d'avoir leur propre ID tant qu'à faire !

    Pour cela, j'ai utilisé l'événement OnRowDataBound du GridView et j'affiche les informations que je désire comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     protected void GridViewAvis_RowDataBound(object sender, GridViewRowEventArgs e)
            {
                // Mes deux requêtes qui permettent de récupérer  le titre du film et le pseudo de l'utilisateur
                if (e.Row.RowType != DataControlRowType.Header && e.Row.RowType != DataControlRowType.Footer)
                {
                    if (e.Row.RowState == DataControlRowState.Normal || e.Row.RowState == DataControlRowState.Alternate)
                    {
                        e.Row.Cells[2].Text = Mon.Pseudo;
                        e.Row.Cells[3].Text = Mon.Titre;
                    }
    }
    Cela fonctionne correctement. Mais si je veux éditer, je retrouve deux TextBox avec les Id correspondant au titre du film et au pseudo de l'utilisateur. Je cherche donc à y mettre des DropDownList afin de pouvoir changer le titre du film ou le pseudo de l'utilisateur par exemple ce que j'ai réussi à faire par :
    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
     
                    else if (e.Row.RowState == DataControlRowState.Edit){
     
                        // DDL utilisateur
                        DropDownList DDLUtilisateur = new DropDownList();
                        foreach (Utilisateur user in ListeUtilisateurs)
                        {
                            DDLUtilisateur.Items.Add(user.Pseudo);
                        }
                        e.Row.Cells[2].Controls.Add(DDLUtilisateur);
     
                        // DDL Movies
                        DropDownList DDLFilms = new DropDownList();
                        foreach (Films film in ListeFilms)
                        {
                            DDLFilms.Items.Add(film.Titre);
                        }
                        e.Row.Cells[3].Controls.Add(DDLFilms);
                    }
                }
    Je créé donc dynamiquement les contrôles, mais j'ai encore les TextBox et si je change la valeur de la DropDownList et que je valide l'édition, cela ne fonctionne pas bien évidemment.
    D'où trois questions :
    - Comment virer ce TextBox et le remplacer par ma DropDownList ?
    - La DropDownList peut-elle se placer directement sur le bon film ou le bon pseudo ? Si oui, comment ?
    - Une fois remplacé, comment faire fonctionner le remplacement si je choisis un autre utilisateur ou un autre titre de film ?

    Merci d'avance pour vos réponses !

  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
    Passe par un EditItemTemplate

  3. #3
    Membre éclairé Avatar de blasil64
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 324
    Par défaut
    Tout d'abord merci pour ta réponse.
    J'ai quand même un soucis. J'aurais aimé utilisé le "EditItemTemplate". Mon soucis, c'est que je ne peux l'intégrer à l'endroit où je veux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <asp:BoundField DataField="IdUtilisateur" HeaderText="Pseudo de l'utilisateur" SortExpression="IdUtilisateur">
     
                </asp:BoundField>
    Lorsque je me positionne dans cette balise, j'ai seulement "ControlStyle", "FooterStyle", "HeaderStyle" et "ItemStyle". Si je me met en dehors de la balise "BoundField", je peux faire le "EditItemTemplate".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <asp:TemplateField>
                    <EditItemTemplate>
     
                    </EditItemTemplate>
                </asp:TemplateField>
    Mais dois-je tout reconfigurer ?
    Comment faire ?

    Merci d'avance pour vos réponses !

  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
    Ne te positionne pas dans BoundField mais utilise TemplateField à la place

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <asp:TemplateField HeaderText="FirstName" SortExpression="FirstName"> 
    <EditItemTemplate> ### Tes controles en mode edition ###</EditItemTemplate> 
    <ItemTemplate> ### Tes controles en mode normal###</ItemTemplate>
     </asp:TemplateField>

  5. #5
    Membre éclairé Avatar de blasil64
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 324
    Par défaut
    Bonsoir,
    Merci pour cette astuce. J'ai tenté le TemplateField avec l'itemTemplate. Ok j'arrive à récupérer les informations de ma base de données, donc je récupère l'id de l'utilisateur ou l'id du film sur lequel porte l'avis.
    Sur quel événement gérer l'affichage du titre du film au lieu de l'id ? Par quel moyen ?
    De plus, je n'ai plus les boutons de modification et de suppression comme avec le BoundField. Puis je le remettre ?

    Voici mon code pour le moment :
    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
    31
    32
    33
    34
    35
    <asp:GridView ID="GridViewAvis" runat="server" 
            AutoGenerateColumns="False" DataKeyNames="Id_de_mon_avis" 
            DataSourceID="le_data_source"
            onrowdatabound="GridViewAvis_RowDataBound">
            <Columns>
            <asp:TemplateField HeaderText="Pseudo de l'utilisateur">
                <itemtemplate>
                  <asp:label id="LabelPseudoUtilisateur" Text='<%# Eval("Id_de_user") %>' runat="server"/> 
                </itemtemplate>
                <EditItemTemplate>
                    <input type="text" runat="server" />
                </EditItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Titre du film">
                <itemtemplate>
                  <asp:label id="LabeltitreFilm" runat="server" Text='<%# Eval("id_du_film") %>'/> 
                </itemtemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Avis">
                <itemtemplate>
                  <asp:label id="LabelAvis" runat="server" Text='<%# Eval("Avis") %>'/> 
                </itemtemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Note">
                <itemtemplate>
                  <asp:label id="LabelNote" runat="server" Text='<%# Eval("la_note") %>'/> 
                </itemtemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Note">
                <itemtemplate>
                  <asp:CheckBox id="CheckBoxIsActive" runat="server" Checked='<%# Eval("est_actif_ou_pas") %>'/> 
                </itemtemplate>
            </asp:TemplateField>
            </Columns>
        </asp:GridView>
    Merci pour ton aide !

  6. #6
    Membre éclairé Avatar de blasil64
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 324
    Par défaut
    Bon j'avance petit à petit !
    Mais il y a les fêtes de Bayonne aussi la nuit et le stage la journée !!

    Bon bref, au niveau des boutons pour éditer et supprimer, j'ai trouvé comme un grand en farfouillant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <asp:TemplateField>
                <ItemTemplate>
                    <asp:linkbutton ID="Edit" Text="Editer" commandname="Edit" runat="server"/> 
                    <asp:LinkButton ID="Suppr" Text="Supprimer" CommandName="Delete" runat="server" />
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:LinkButton ID="Update" Text="Mettre à jour" CommandName="Update" runat="server" />
                    <asp:LinkButton ID="Cancel" Text="Annuler" CommandName="Cancel" runat="server" />
                </EditItemTemplate>
            </asp:TemplateField>
    J'ai pu tester d'en supprimer un, et ça a fonctionné niquel.

    Mais je n'ai pas encore trouvé comment faire pour afficher les noms des utilisateurs et le film qui est noté.

    Merci pour l'aide.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/07/2006, 10h18
  2. [C#] Comment exporter un GridView vers Excel ?
    Par anto dans le forum ASP.NET
    Réponses: 4
    Dernier message: 26/05/2006, 16h24
  3. Réponses: 4
    Dernier message: 17/05/2006, 15h11
  4. [C#] Comment gérer un GridView sur plusieurs pages ?
    Par transistor49 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 26/04/2006, 15h56
  5. [C#] Comment trier un GridView ?
    Par Allen dans le forum ASP.NET
    Réponses: 4
    Dernier message: 26/04/2006, 15h50

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