Grid view et image button

Signaler
Messages postés
95
Date d'inscription
lundi 11 février 2008
Statut
Membre
Dernière intervention
8 juin 2009
-
Messages postés
95
Date d'inscription
lundi 11 février 2008
Statut
Membre
Dernière intervention
8 juin 2009
-
Bonjour,

Est-il possible d'associer un événement onClick sur une image button contenu dans une colonne de la gridView, en récupérant l'id de la ligne ? Si oui, comment faire ?

Voici la dernière colonne de mon gridView, contenant pour chaque ligne 3 images, pour 3 actions différentes :
           
               
                   
                   
                   
                   
                   
               
               
           

La première image consiste à voir les détails de l'utilisateur, lors du clique sur l'image il faudrait récupérer l'ID de l'utilisateur.
La deuxième consiste à modifier les informations de l'utilisateur, lors du clique sur l'image il faudrait récupérer l'ID de l'utilisateur.
La troisième consiste à supprimer l'utilisateur. <= Pour ça pas de problème je n'ai pas besoin d'évènement OnCLick.

8 réponses

Messages postés
417
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
21 juillet 2010
1
Bonsoir,

Une possibilité, en vb, en mettant onclick="cl" sur ton imagebutton :

Protected Sub cl(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs)
        Dim id As String = sender.parent.parent.cells(0).text
        TonLabel.text=id
End Sub

Ici, on remplit un label avec le texte de la première cellule de la ligne de la gridview sur laquelle se trouve l'imagebutton.

GGtry
Messages postés
95
Date d'inscription
lundi 11 février 2008
Statut
Membre
Dernière intervention
8 juin 2009
1
Bonjour ggtry merci de ta réponse.

J'ai essayé en C#, mais il ne reconnait pas l'évenement OnClick.

<title>Erreur de compilation</title><style><![CDATA[
body {font-family:"Verdana";font-weight:normal;font-size: .7em;color:black;}
p {font-family:"Verdana";font-weight:normal;color:black;margin-top: -5px}
b {font-family:"Verdana";font-weight:bold;color:black;margin-top: -5px}
H1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
H2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
pre {font-family:"Lucida Console";font-size: .9em}
.marker {font-weight: bold; color: black;text-decoration: none;}
.version {color: gray;}
.error {margin-bottom: 10px;}
.expandable { text-decoration:underline; font-weight:bold; color:navy; cursor:hand; }
]]></style>Description :
Une erreur s'est produite lors de la compilation d'une ressource requise
pour répondre à cette demande. Veuillez consulter ci-dessous les détails
relatifs à l'erreur en question, puis modifier votre code source de manière
appropriée.

Message d'erreur du compilateur: CS0117:
'ASP.gestionutilisateurs_aspx' ne contient pas de définition pour
'imgActionViewClick'

Voici la dernière colonne de mon gridview :
           
               
                   
                   
                   
                   
                   
               
               
           

Et la procédure pour l'évenement OnCLick :
        protected void imgActionViewClick_Click(object sender, ImageClickEventArgs e, GridViewCommandEventArgs eg)
        {
            if (eg.CommandName == "View")
            {
              int id = Convert.ToInt32(eg.CommandArgument);
            }
            Response.Redirect("viewUtilisateur.aspx");
            // Recuperation de l'id par une session
        }
Messages postés
417
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
21 juillet 2010
1
Bonjour,

En c#, je ne pourrais pas t'aider très loin (je code seulement en vb), mais :
1/ tu écris protected void imgActionViewClick_Click alors que tu appelles onclick="imgActionViewClick"...
2/ pour faire comme tu veux faire, tu dois plutôt passer par l'événement RowCommand de ta gridview en n'oubliant pas de définir ton commandargument. Cela donnera le même résultat :

                    ' ImageUrl="~/Ton_Image.png" runat="server" />
 

et :

 protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "coco")
        {
            Label1.Text = e.CommandArgument.ToString();
        }
    }

GGtry
Messages postés
95
Date d'inscription
lundi 11 février 2008
Statut
Membre
Dernière intervention
8 juin 2009
1
Ah oui exact j'avais même mal renommé ma procédure.

Sinon lorsque je clique sur mon image ça ne redirige pas vers ma page voulu.
Code C#
        protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "View")
            {           
                int index = Convert.ToInt32(e.CommandArgument);
                Response.Redirect("viewUtilisateur.aspx");
                Session["id_user"] = index;
            }
        }
Dernière colonne de ma gridView :
           
               
                    '/>
                   
                   
                   
                   
               
               
           
Messages postés
417
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
21 juillet 2010
1
Bonsoir,

J'imagine que tu veux récupérer ta variable de session dans ta deuxième page pour afficher les données utiles ?
Mais ta variable de session est définie après le response.redirect. Il faut le faire avant...

Je ne sais pas ce que tu veux faire exactement, mais peut-être serait-il mieux de ne pas passer par la session pour faire cela, et de passer l'argument dans l'url ? Il est plus intéressant de passer par la session pour les données que tu veux faire persister au cours de la navigation sur ton site.

GGtry
Messages postés
95
Date d'inscription
lundi 11 février 2008
Statut
Membre
Dernière intervention
8 juin 2009
1
Exact ggtry ! Pour la session je l'avais mis après mais c'était sans réfléchir, je voulais voir avant que lorsque je cliquais sur mon image, ça me redirigeais bien vers mon autre page. Mais là non.

C'est mon premier projet en asp.net et je patauge un peu. D'autant plus que sur Internet, je ne trouve pas mon bonheur niveau tuto, pour des trucs simples que je connais en PHP.
Cet après-midi j'ai trouvé la solution grâce à ton aide et celle d'un collège. A la place d'utiliser un image button, j'utilise un href img, pour la redirection du site, et je passe l'id de l'utilisateur en paramètre dans l'url, grâce à ça '<%# Eval("id_user") %>'.

Voilà, quand je pense au temps que j'ai mis pour trouver ça !!! Et c'est vrai que les sessions se n'ai pas du tout adapté pour ce que je veux faire, mais je ne savais pas comment récupérer mon id et le passer en paramètre dans mon url.

Merci ggtry, c'était sympa de m'avoir aidé, ça m'a bien aiguillé vers la solution.
Messages postés
417
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
21 juillet 2010
1
Rebonsoir,

Dans ce cas, tu pouvais aussi utiliser l'imagebutton, un peu sur le même principe, mais avec un postbackurl, avec la syntaxe suivante :

                    ' ImageUrl="~/ton_image.png" runat="server" />
   

On ne sait jamais : si ça peut servir...

Bonne continuation.

GGtry
Messages postés
95
Date d'inscription
lundi 11 février 2008
Statut
Membre
Dernière intervention
8 juin 2009
1
Ha merci !!! c'est toujours bon à savoir. Je vais même essayer tiens.