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 :

Evenement assigné sur un bouton crée à la volée


Sujet :

ASP.NET

  1. #1
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 19
    Par défaut Evenement assigné sur un bouton crée à la volée
    Salut, c'est toujours moi ^^

    J'ai de nouveau un problème parce que mon bouton ne se lie pas à mon événement.

    Mis à part que le code soit sale (Extrem Programing oblige...) et non optimisé encore, est ce que vous voyez une erreur flagrante qui fait que mon événement ne puisse s'attacher à mon bouton crée dynamiquement ?

    J'ai l'impression qu'il perd la référence de mon bouton au cours de l'assignation du control dans mes objets.

    Quand je fais mon pas à pas on voit bien que mon bouton n'en a rien à f**tre de mon évènement. A la place il me refresh la page courante...

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    Partial Class WebUserControl
        Inherits System.Web.UI.UserControl
     
        Private tab As TableDeFrais
        Private row_collec As RowCollection
        Private cell_collec As CollumnCollection
        Private row As Row
        Private cell As Collumn
     
        Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     
            If Not Session("tableauDeNdF") Is Nothing Then
                tab = Session("tableauDeNdF")
                panelSource.Controls.Add(tab.Render())
            End If
     
        End Sub
     
     
        Protected Sub bt_creerNdF_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles bt_creerNdF.Click
     
            If (tab Is Nothing) Then
                tab = New TableDeFrais(MonthName(Month(DateTime.Now())), Session("login"))
                tab.mesLignes.Add(creerLigneVierge(tab.mesLignes.Count + 1))
                'faire un render de tableau dans le PanelSource
                panelSource.Controls.Add(tab.Render())
     
                'garde en mémoire le tableau de note de frais en cours
                Session("tableauDeNdF") = tab
            End If
        End Sub
     
     
        Public Function creerLigneVierge(ByVal i As Integer) As Row
     
            Dim cell_collec As New CollumnCollection()
            Dim row_collec As New RowCollection()
            Dim Row As New Row()
            Dim cell As New Collumn()
     
            'création et ajout de cellule à une collection de cellules
            cell_collec.Add(New Collumn(service.creerUnControl("TextBox", "mois" & i, "Juin")))
            cell_collec.Add(New Collumn(service.creerUnControl("TextBox", "libelle" & i, "Déplacement à Marseille pour rencontrer client Carrouf")))
            cell_collec.Add(New Collumn(service.creerUnControl("DropDownList", "typeFrais" & i, "Hotel/Restaurant")))
            cell_collec.Add(New Collumn(service.creerUnControl("TextBox", "distance" & i, "700km")))
            cell_collec.Add(New Collumn(service.creerUnControl("TextBox", "tva" & i, "800€")))
            cell_collec.Add(New Collumn(service.creerUnControl("TextBox", "ht" & i, "570€")))
     
            'ajout du bouton pour créer une nouvelle ligne
            Dim btn_validerUneLigne As Button = service.creerUnControl("Button", "bt_ligneVierge" & i, "Créer une nouvelle ligne " & i)
            btn_validerUneLigne.CommandArgument = i
            AddHandler btn_validerUneLigne.Click, AddressOf validerUneLigne_Click
     
            cell_collec.Add(New Collumn(btn_validerUneLigne))
     
            'ajout de la collection de cellules à une ligne
            Row.mesColonnes = cell_collec
            Return Row
     
        End Function
     
        Public Sub validerUneLigne_Click(ByVal sender As Object, ByVal e As System.EventArgs)
            'Récupération du bouton ayant déclenché l'événement 
            Dim Btn As Button
            Btn = CType(sender, Button)
            'Traitement 
            Btn.Text = "ca marche" & Btn.CommandArgument.ToString()
     
            Dim i As Integer
            i = CType(Btn.CommandArgument, Integer) + 1
     
            tab.mesLignes.Add(creerLigneVierge(i))
     
        End Sub
    EDIT : j'ai remonté les méthodes qui était à la base dans mes classes, dans le code-behind de ma page pour que ce soit plus facile à lire pour vous

  2. #2
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Bon, moi je suisn pas encore trés fort dans ce domaine, mais je pense que le soucis doit venir de là :
    Dim btn_validerUneLigne As Button = service.creerUnControl("Button", "bt_ligneVierge" & i, "Créer une nouvelle ligne " & i)
    Pour faire un AddHandler je pense qu'un New Button est mieux, mais je epux me tromper. Mais surtout, vu qu'on sait pas ce qu'il y a dans cette fonction, ben si ça se trouve ton problème est dans la fonction.

    J'ai lu deux fois ton code, et j'ai rien vu, mais encore une fois, je suis pas fort.

  3. #3
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 19
    Par défaut
    Je me suis dis la même chose que toi et j'ai testé cela avant même que tu me proposes cette solution, mais rien n'y fait.

    Merci beaucoup en tous cas d'avoir pris le temps

    La fonction me renvoie un control :

    Public Shared Function creerUnControl(ByVal typeDuControl As String, ByVal unId As String, ByVal unText As String) As Control

  4. #4
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Alors peut être qu'il placer le AddHandler dans la fonction de création du bouton, mais pas sûr.

    J'avoue ne pas avoir le temps de faire le test

  5. #5
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 19
    Par défaut
    J'ai a moitié résolu mon problème en recherchant tout mes controls buttons qui m'intéresse et en leur réaffectant l'événement à l'évènement preInit de la page...

    Encore une fois c'est sale et c'est nul de faire ca, donc si vous avez un conseil à me donner

  6. #6
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    Je ne vois pas à quel moment tu ajoutes ton bouton à la collection de contrôles de ta page.
    Pour moi il manque un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    page.Controls.add(myButton)
    quelque part.

    Je n'ai pas le temps de regarder tout ton code mais comme Zoofy je ne comprend pas pourquoi tu n'instancies pas ton objet Button aavec un New

    Il se peut aussi qu'il y ait un probleme de postback selon l'evenement d'ou tu appelles ta fonction "creerLigneVide"

  7. #7
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 19
    Par défaut
    J'ai pas de page.controls.add(bouton) mais j'ai un panel.controls.add(bouton)

    Y'a une grosse différence entre ces deux méthodes ? Sachant que le panel est référencé en dur dans ma page.

  8. #8
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    Je n'avais pas vu, désolé.

    Dans ce cas je penche pour un problème d'instanciation comme je l'ai dis dans mon post précédent
    ou bien pour un problème de postback.

  9. #9
    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
    Citation Envoyé par remibeginer Voir le message
    J'ai a moitié résolu mon problème en recherchant tout mes controls buttons qui m'intéresse et en leur réaffectant l'événement à l'évènement preInit de la page...

    Encore une fois c'est sale et c'est nul de faire ca, donc si vous avez un conseil à me donner
    Tu crées tes boutons dynamiquement.
    Il me semble donc que tu n'as pas d'autres choix que leur réaffecter leurs événements à chaque chargement de la page étant donné que un chargement <=> nouvelle instance de ton objet page

  10. #10
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 19
    Par défaut
    merci pour ta réponse, le problème est donc clos

    Zetes des chefs

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 12/04/2013, 18h01
  2. Réponses: 7
    Dernier message: 26/05/2011, 09h37
  3. evenement different sur même bouton
    Par floriaan60 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 02/06/2008, 09h47
  4. évènements sur plusieurs boutons crées dynamiquement
    Par Mangacker dans le forum C++Builder
    Réponses: 40
    Dernier message: 01/05/2008, 18h57
  5. Action sur des boutons crées dynamiquement
    Par barthelus76 dans le forum SWT/JFace
    Réponses: 13
    Dernier message: 28/06/2007, 20h32

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