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 :

AddHandler et évènement non reçu


Sujet :

ASP.NET

  1. #1
    Membre averti
    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
    Par défaut AddHandler et évènement non reçu
    Bonjour,

    J'ai un problème qui semble assez classique, mais pour lequel aucune des pages que j'ai trouvées ne m'a vraiment éclairé.
    Ou j'ai pas tout compris, ce qui est plus que possible.

    J'ai une page ASP .Net dans laquelle j'ai une GridView nue que je construis complètement dynamiquement.
    Cela marche parfaitement, elle s'affiche bien comme je le désire tant que j'y colle des données textuelles venues de ma base de données.

    Mais j'ai bêtement décidé de rajouter une colonne avec un ImageButton et si mon image cliquable apparaît bien sur chaque ligne de la grille, le handler d'évènement Click que j'ai associé à mon ImageButton n'est jamais appelé (alors qu'un clic sur le bouton en question me provoque bien un PostBack puisque je repasse dans le Page_Load et que je réaffiche ma page -sans sa grille parce que ce cas n'est prévu-).

    J'ajoute mes boutons dans le handler d'évènement et de la manière suivants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Sub MyGridViewAMoi_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
    	Dim _myLink As ImageButton
     
    	If e.Row.RowType = DataControlRowType.DataRow Then
    		_myLink = New ImageButton
    		_myLink.ID = "MyButton" & e.Row.RowIndex
    		_myLink.AlternateText = "Ca va le faire !"
    		_myLink.ImageUrl = "../images/monimage.gif"
    		AddHandler _myLink.Click, AddressOf MyLink_Click
    		e.Row.Cells(7).Controls.Add(_myLink)
    	End If
    End Sub
    Bien sûr la subroutine MyLink_Click existe, mais je n'y rentre jamais.

    Je précise que, pour diverses raisons, je reconstruis systématiquement ma grille à chaque réaffichage et je repasse donc à chaque fois dans les évènements RowDataBound qui sont bien appelés après le Page_Load (j'ai cru lire plusieurs fois que les handlers devaient être ajoutés après le Load et à chaque chargement de page).

    J'y perds donc mon peu de latin.
    Pourquoi ne passe-je pas mon handler ? Et que dois-je faire pour qu'il soit appelé ?

    La mise en oeuvre d'une tel truc devrait être d'une simplicité quasiment biblique, mais ça marche pas pour moi.

    Merci d'avance pour toute piste intéressante.

    Lino

  2. #2
    Membre confirmé

    Inscrit en
    Novembre 2003
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 168
    Par défaut
    Je suis comme presque persuadé que ton problème vient de là :
    Je précise que, pour diverses raisons, je reconstruis systématiquement ma grille à chaque réaffichage et je repasse donc à chaque fois dans les évènements RowDataBound qui sont bien appelés après le Page_Load (j'ai cru lire plusieurs fois que les handlers devaient être ajoutés après le Load et à chaque chargement de page).
    Quand il y a clique sur le ImageButton il y a un PostBack qui va suivre, et si dans ton Postback tu recrée ton GridView alors le bouton qui a été cliqué n'existe plus et son évènement ne sera pas exécuté.

    Est-ce que tu dois vraiment reconstruire ton GridView à chaque Postback ? J'éspère pour toi que Non.

  3. #3
    Membre averti
    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
    Par défaut
    La piste pourrait être bonne, sauf que, justement, dans le PostBack lié au click sur mon ImageButton, je ne reconstruis pas la grille.
    En fait, je ne fais rien dans chacun des évènements qui s'enchaînent parce que ça ne correspond pas à un cas souhaité (c'est l'évènement associé au clic sur un ImageButton qui devrait reremplir la grille - et comme je ne le reçois pas...).

    Cela dit, ta remarque m'a mis le doigt sur quelque chose :

    - Avant, dans le Page_Load, je supprimais le contenu de la grille avant de le recréer dans chacun des évènements associés à mes boutons. Donc, rien ne se réaffichait à l'emplacement de ma grille après retour du clic sur un ImageButton.

    - Maintenant, suite à ta remarque, je ne détruis le contenu que juste avant de le recréer.
    Et là, ma grille se réaffiche toute seule intacte, SAUF QUE mes ImageButtons ne sont plus présents.

    Donc, peut-être que tu as raison quelque part et que, mes boutons ayant disparu (à quel moment et par quelle opération du Saint-Esprit ?), leur handler n'est pas appelé, s'ils ont disparu avant ou juste après le Page_Load.

    Si ça peut donner à quelqu'un des idées d'embryon de début de commencement de piste...

    Lino

  4. #4
    Membre confirmé

    Inscrit en
    Novembre 2003
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 168
    Par défaut
    Donc, peut-être que tu as raison quelque part et que, mes boutons ayant disparu (à quel moment et par quelle opération du Saint-Esprit ?), leur handler n'est pas appelé, s'ils ont disparu avant ou juste après le Page_Load.
    il n y ni mystère ni saint esprit ni calisse de tabarnac, tout ce qui est créé dynamiquement ne survivera pas au prochain Postback, si ta colonne de l'ImagBouton doit être toujours là, alors autant la créer de manière statique, ensuite, tu pourras ajouter dynamiquement les autres colonnes.

  5. #5
    Membre averti
    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
    Par défaut
    tout ce qui est créé dynamiquement ne survivera pas au prochain Postback
    Je ne demande qu'à te croire, parce que le Saint-Esprit, j'y crois moyen.

    Mais :

    1. Comment expliques-tu que mes autres colonnes, créées dynamiquement elles aussi, soient toujours là, elles, quand ma page est réaffichée alors que je ne fais pourtant rien du tout dans le postback sur l'ImageButton ?

    2. Comment puis-je m'assurer qu'une colonne créée statiquement dans le code de ma page ASP sera la plus à droite, après celles que je crée dynamiquement ? Autrement dit, puis-je insérer mes colonnes devant d'autres ?

    Cela dit, en entrant dans le Page_Load au retour du clic sur un ImageButton, le contrôle n'est effectivement plus présent. Ce qui explique clairement que le handler n'est jamais appelé.

  6. #6
    Membre confirmé

    Inscrit en
    Novembre 2003
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 168
    Par défaut
    1. Comment expliques-tu que mes autres colonnes, créées dynamiquement elles aussi, soient toujours là, elles, quand ma page est réaffichée alors que je ne fais pourtant rien du tout dans le postback sur l'ImageButton ?
    Je ne suis pas tres sur, mais j'ai comme l'impression que les autres colonnes sont perdues puis recréées c'est pour ça qu'elle sont toujours là.

    2. Comment puis-je m'assurer qu'une colonne créée statiquement dans le code de ma page ASP sera la plus à droite, après celles que je crée dynamiquement ? Autrement dit, puis-je insérer mes colonnes devant d'autres ?
    Ah ça jamais essayé, mais il doit y avoir moyen je pense.

    Je pense que je ne pourrais t'aider plus si tu ne poste pas ton code behind au complet

  7. #7
    Membre averti
    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
    Par défaut
    Bon, sans se casser la tête, au lieu de Columns.Add, on peut utiliser Columns.Insert.
    Elle est pas belle la vie ?

    Je vais donc m'y coller.

    Merci pour l'aide.

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

Discussions similaires

  1. Créer un événement non graphique
    Par Thorna dans le forum Général Java
    Réponses: 4
    Dernier message: 23/04/2007, 12h52
  2. évènement non prévu dans un petit programme
    Par flamant dans le forum C++
    Réponses: 3
    Dernier message: 18/01/2007, 21h56
  3. mouseMoved -> pertes ou événements non déclenchés
    Par karibouk dans le forum Interfaces Graphiques en Java
    Réponses: 7
    Dernier message: 16/10/2006, 15h55
  4. Gestionnaires d'évènements non déclenchés
    Par Sylvain James dans le forum XMLRAD
    Réponses: 7
    Dernier message: 19/04/2006, 18h14
  5. Réponses: 16
    Dernier message: 28/11/2005, 19h09

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