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 :

Soumettre certaines informations d'une GridView à un text


Sujet :

ASP.NET

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Points : 619
    Points
    619
    Par défaut Soumettre certaines informations d'une GridView à un text
    J'ai dans mon application un objet Gridview
    Ce GridView contient des colonnes avec des BoundField et d'autres avec des ButtonField

    Je voudrais que le ButtonField n'existe que dans certains cas.

    J'avais pensé charger avec ce code au niveau du fichier ASPX
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                         <asp:ButtonField ButtonType="Image"
                                           HeaderStyle-CssClass = "row_LigneTitre"  
                                           CommandName="btn_Mail" 
                                           HeaderText="Mail" 
                                           ImageUrl='Images/Enveloppe.ico' >   
                                           <ItemStyle HorizontalAlign="Center"   Width="50px" />
                          </asp:ButtonField>
    et dans le code behind tester les conditions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
               for (i=0; i<gr_ListeEval.Rows.Count;i++){
                    if ((gr_ListeEval.Rows[i].Cells[0].Text.Equals(..
    Par contre à partir de là je ne sais pas comment accéder à l'objet image

  2. #2
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 512
    Points
    9 512
    Par défaut
    Salut,

    Le seul moment ou tu devrais faire ce test est lorsque chaque ligne de ton gridview est crée: ItemDataBound.

    Cette méthode prend en paramètre la ligne est des arguments. Il faut que tu recherche (FindControl) ton bouton. Une fois que tu l'as tu peux faire ce que tu veux dessus.

    A+

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Points : 619
    Points
    619
    Par défaut
    Merci

    Je n'ai pas trouvé l'évènement ItemDataBound et en cherchant sur les forum j'ai vu que RowDataBound avait la même utilité

    Ce que je ne comprends pas c'est comment paramétrer le FindControl.
    Actuellement mon code est le suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                         <asp:ButtonField ButtonType="Image"
                                           HeaderStyle-CssClass = "row_LigneTitre"  
                                           CommandName="btn_Profil" 
                                           HeaderText="Profil" 
                                           ImageUrl='../Images/EVAL/Visage.jpg' >
                                           <ItemStyle HorizontalAlign="Center"   Width="50px" />
                          </asp:ButtonField>
    J'ai préparé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ButtonField bl = (ButtonField)e.Row.FindControl("???");
    mais je ne vois pas comment ajouter un ID et en plus j'ai une erreur de syntaxe.

  4. #4
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 512
    Points
    9 512
    Par défaut
    Hello,

    Effectivement c'est RowDataBound.
    Pour trouver le contrôle qui t’intéresse, utilise l'ID du contrôle (celui qui est dans le code inline).

    Sinon, mets un point d'arrêt à l'entrée de la méthode et regarde ce qui se trouve dans l'objet "e".

    A+

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Points : 619
    Points
    619
    Par défaut
    Ok mais je n'y arrive pas.
    Le Find retourne toujours False

    Avec ce code la notion d'ID retourne une erreur. Je ne pourrai donc par utilise Find.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                         <asp:ButtonField ButtonType="Image"
                                           HeaderStyle-CssClass = "row_LigneTitre"  
                                           CommandName="btn_Mail" 
                                           HeaderText="Mail"  
                                           ImageUrl='../Images/EVAL/Enveloppe.ico' >   
                                           <ItemStyle HorizontalAlign="Center"   Width="50px" />
                          </asp:ButtonField>
    Si je change mon code au niveau description
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                          <asp:TemplateField HeaderText="xxxx">
                                           <ItemTemplate>
                                                <asp:ImageButton ID="btn_Mailz" 
                                                                 runat="server" 
                                                                 CommandName="btn_Mail" 
                                                                 ImageUrl='../Images/EVAL/Enveloppe.ico'>
                                                </asp:ImageButton>
                                            </ItemTemplate>
                          </asp:TemplateField>
    le code suivant répond toujours False
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            protected void gr_ListeEval_RowDataBound(object sender, GridViewRowEventArgs e)
            {
                ImageButton btn_Mail = (ImageButton)e.Row.FindControl("btn_Mail");
            }

  6. #6
    Expert éminent sénior

    Avatar de FirePrawn
    Homme Profil pro
    Consultant technique
    Inscrit en
    Mars 2011
    Messages
    3 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique

    Informations forums :
    Inscription : Mars 2011
    Messages : 3 179
    Points : 19 373
    Points
    19 373
    Par défaut
    Peut-être parce que ID="btn_Mailz" au lieu de "btn_Mail" ?

  7. #7
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Points : 619
    Points
    619
    Par défaut
    Cela aurait été trop beau.
    J'avais juste fait une erreur en recopiant.

    Par contre j'ai fini par comprendre.
    L'évènement RowDataBound semble être déclenché pour chaque colonne. De ce fait comme mon bouton Image se trouve en colonne 8 il est normal qu'en début de traitement je ne le vois pas

    J'ai utilisé une autre méthode.
    Dans le code Behind j'ai une boucle qui analyse les informations de la ligne et applique une couleur en conséquence.
    J'y ai ajouté le traitement du bouton image

    Cela donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for (i=0; i<gr_ListeEval.Rows.Count;i++){
          if (gr_ListeEval.Rows[i].Cells[7].Text.Equals("").Equals(false))
         {
            gr_ListeEval.Rows[i].Cells[5].Controls[0].Visible=false;
          }
     }
    Merci de votre aide

  8. #8
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 512
    Points
    9 512
    Par défaut
    Citation Envoyé par Delphi-ne Voir le message
    L'évènement RowDataBound semble être déclenché pour chaque colonne. De ce fait comme mon bouton Image se trouve en colonne 8 il est normal qu'en début de traitement je ne le vois pas
    Pas tout à fait. Il se déclenche pour chaque ligne une fois que les données ont été liées.

    La raison pour laquelle tu ne vois pas le bouton c'est simplement une conséquence de la programmation objet. Un objet encapsule (cache) ses objets enfants. La ligne (Row) a des cellules (Cells). Les cellules contiennent les contrôles serveur (TextBox, Button). Ces derniers ne sont pas visibles par la ligne car encapsulés pas la cellule.

    Il serait tout de même logique que tu fasse ce traitement sur le RowDataBound.

  9. #9
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Points : 619
    Points
    619
    Par défaut
    Il se déclenche pour chaque ligne une fois que les données ont été liées.
    Ca je ne le savais pas

    Un objet encapsule (cache) ses objets enfants. La ligne (Row) a des cellules (Cells). Les cellules contiennent les contrôles serveur (TextBox, Button). Ces derniers ne sont pas visibles par la ligne car encapsulés pas la cellule.
    Je vais refaire le test mais dans ce cas je ne comprends pas pourquoi le Find ne fonctionnait pas

  10. #10
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 512
    Points
    9 512
    Par défaut
    Citation Envoyé par Delphi-ne Voir le message
    je ne comprends pas pourquoi le Find ne fonctionnait pas
    Un dessin valant mieux qu'un discours. Le bouton est dans la cellule. La cellule dans la ligne. La cellule cache le bouton aux "yeux" de la ligne. Le Find ne voit que les objets de premier niveau. Pour voir les autres, il faut une fonction dite "récursive" qui va parcourir tous les objets et sous objets. Exemple ici: http://www.developpez.net/forums/d12...iew-imbriquee/
    Images attachées Images attachées  

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

Discussions similaires

  1. Imprimer les informations d'une GridView
    Par beaudelaire dans le forum ASP.NET
    Réponses: 1
    Dernier message: 23/05/2011, 21h55
  2. Agrandir ou diminuer la taille du text d'une gridView
    Par mfrai02 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 20/01/2010, 13h47
  3. [AC-2000] Controler les informations saisies dans une zone de texte
    Par etoileetoile dans le forum VBA Access
    Réponses: 2
    Dernier message: 07/10/2009, 14h33
  4. [MySQL] Bannir certains termes dans une zone de texte
    Par kitten13 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 25/05/2009, 00h14
  5. Réponses: 5
    Dernier message: 23/12/2005, 19h19

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