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 :

Recupérer attribut "checked" d'une checkbox créée dynamiquement


Sujet :

ASP.NET

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 235
    Points : 183
    Points
    183
    Par défaut Recupérer attribut "checked" d'une checkbox créée dynamiquement
    Bonjour,

    Je suis débutant en ASP.net et je ne comprend peut-être pas toute la philosophie...

    J'ai une page en vb.net qui insère dans ma page web (.aspx) des checkbox. Je voudrais simplement que lorsqu'on clique sur un bouton, je puisse savoir quelles checkbox sont cochées.
    Pour faire rapide, j'ai une liste que j'affiche sur ma page web (qui provient d'une base de données) et j'insère une checkbox pour chaque ligne de la liste afin de permettre à l'utilisateur de pouvoir supprimer les lignes qu'il souhaite.

    Actuellement j'ai essayé d'utiliser l'évènement "CheckedChanged" de mes checkbox, mais je comprend pas quand l'évènement se déclenche...

    Si vous pouviez m'éclairer un peu...

    Merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    360
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 360
    Points : 486
    Points
    486
    Par défaut
    pourrais tu montrer comment tu ajoutes tes checkbox.

    Merci

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Borowsky Voir le message
    Actuellement j'ai essayé d'utiliser l'évènement "CheckedChanged" de mes checkbox, mais je comprend pas quand l'évènement se déclenche...
    Si la propriété AutoPostBack de la CheckBox vaut true, l'évènement se produit immédiatement quand tu cliques dessus. Sinon, il se produit au prochain PostBack (clic sur un bouton par exemple, ou n'importe quel action qui provoque un retour vers le serveur)

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 235
    Points : 183
    Points
    183
    Par défaut
    Voila comment j'ajoute mes checkbox : (c'est pas très beau mais bon...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
               PlaceHolder1.Controls.Add(New LiteralControl("<table border='1'><tr><td>Id</td><td>Designation</td><td>Supprimer ?</td></tr>"))
                Do Until rst.EOF = True
                    MaCheckBox = New System.Web.UI.WebControls.CheckBox
                    AddHandler MaCheckBox.CheckedChanged, AddressOf MaCheckBox_Clicked
                    PlaceHolder1.Controls.Add(New LiteralControl("<tr><td>" & Var1 & "</td><td>" & Var2 & "</td><td>"))
                    MaCheckBox.ID = "Check" & Var1
                    PlaceHolder1.Controls.Add(MaCheckBox)
                    PlaceHolder1.Controls.Add(New LiteralControl("</td></tr>"))
                    MaCheckBox.Dispose()
                    rst.MoveNext()
                Loop
                PlaceHolder1.Controls.Add(New LiteralControl("</table>"))
    J'aimerais que quand je clic sur mon bouton "Supprimer", je puisse récupéré les ID des checkbox cochées.
    Ce que je comprend pas c'est que si je met la valeur AutoPostBack à true de mes checkbox, il rafraichit la page quand je clique sur la checkbox mais ne va jamais dans ma fonction MaCheckBox_Clicked...

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 235
    Points : 183
    Points
    183
    Par défaut
    Plus généralement, Lorsque je clic sur un bouton de ma page il passe pas dans la fonction qui gère l'évènement du clic sur le bouton, il recharge directement la page, par la fonction "Load"...

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Borowsky Voir le message
    Plus généralement, Lorsque je clic sur un bouton de ma page il passe pas dans la fonction qui gère l'évènement du clic sur le bouton, il recharge directement la page, par la fonction "Load"...
    Normal, Load est exécuté à chaque PostBack. Si tu as du code d'initialisation dans le Load, tu peux tester la propriété IsPostBack pour ne pas exécuter à nouveau ce code. L'évènement CheckChanged est exécuté après le Load

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 235
    Points : 183
    Points
    183
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Normal, Load est exécuté à chaque PostBack. Si tu as du code d'initialisation dans le Load, tu peux tester la propriété IsPostBack pour ne pas exécuter à nouveau ce code. L'évènement CheckChanged est exécuté après le Load
    Beh moi l'événement n'est jamais exécuté...:d
    Même après le rechargement de la page...Donc en fait, il faut que je recharge la page pour voir quelles cases sont cochées...Mais après il faut que je recharge une nouvelle fois la page pour qu'elle affiche la liste mais sans les lignes que l'utilisateur a coché... Donc ca fait 2 rechargement de page... J'aurais peut-etre pas du me mettre à l'APS.net...

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    360
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 360
    Points : 486
    Points
    486
    Par défaut
    si comprends bien tu veux selectionner des checkbox et quand tu cliques sur un boutton supprimer alors cela lance un evenemement qui regardes les checkbox cochée?

    Si c'est bien ça alors tu n'a pas besoin d'évènement sur tes checkbox donc pas besoin d'autopostback.
    Il te suffit dans l'evenement onclick de ton boutton supprimer, de rechercher tes checkbox en faisant par exemple un FindControl("ID de ta checkbox")

    Dim c as CheckBox
    c = PlaceHolder1.FindControl("ID de ta checkbox")
    if(c.Checked) then
    ....

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 235
    Points : 183
    Points
    183
    Par défaut
    Citation Envoyé par jjameau Voir le message
    si comprends bien tu veux selectionner des checkbox et quand tu cliques sur un boutton supprimer alors cela lance un evenemement qui regardes les checkbox cochée?

    Si c'est bien ça alors tu n'a pas besoin d'évènement sur tes checkbox donc pas besoin d'autopostback.
    Il te suffit dans l'evenement onclick de ton boutton supprimer, de rechercher tes checkbox en faisant par exemple un FindControl("ID de ta checkbox")

    Dim c as CheckBox
    c = PlaceHolder1.FindControl("ID de ta checkbox")
    if(c.Checked) then
    ....
    Ok merci bien, je ne savais pas qu'on pouvait faire ca. Mais ca ne fonctionne pas...il ne trouve pas le control qui a l'ID que je lui met. "c" contient "nothing". Pourtant, dans le code source de ma page web j'ai bien un control qui a l'ID que je met en argument.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    360
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 360
    Points : 486
    Points
    486
    Par défaut
    tu es sous quel framework?

    Normalement l'ID que tu vois dans ton code source ne doit pas être celui que tu doit mettre dans le findcontrol...
    Tu est l'ID "dotnet" => "Check" & Var1 pour toi
    et l'ID client qui est l'interpretation de l'ID dotnet

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 235
    Points : 183
    Points
    183
    Par défaut
    Citation Envoyé par jjameau Voir le message
    tu es sous quel framework?

    Normalement l'ID que tu vois dans ton code source ne doit pas être celui que tu doit mettre dans le findcontrol...
    Tu est l'ID "dotnet" => "Check" & Var1 pour toi
    et l'ID client qui est l'interpretation de l'ID dotnet
    Et la je dois mettre l'ID Client ? et comment je le trouve l'ID Client ?

    Je suis sous Visual Studio 2005, Microsoft .NET Framework 2.0

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 235
    Points : 183
    Points
    183
    Par défaut
    Ah ! mon PlaceHolder était vide car la page se rechargeait mais je ne le créait que lors du premier chargement...J'arrive donc maintenant a récupéré les controls présents dans mon PlaceHolder...

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    360
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 360
    Points : 486
    Points
    486
    Par défaut
    bonne nouvelle alors.
    Bonne continuation

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 235
    Points : 183
    Points
    183
    Par défaut
    Citation Envoyé par jjameau Voir le message
    bonne nouvelle alors.
    Bonne continuation
    Merci !

    Une petite (surement pas dernière) question... Quand je clic sur mon bouton supprimer, il passe 2 fois dans l'évènement button_click... je ne comprend pas pourquoi... Si tu as une idée... :p

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    360
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 360
    Points : 486
    Points
    486
    Par défaut
    montres moi ton code. Tu as bien enlevé les abonnement sur tes checkbox?

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 235
    Points : 183
    Points
    183
    Par défaut
    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
    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
            Try
                DB = New SQLServeur(SERVEUR, "TEST")
                rst = DB.RequeteRd("SELECT Id, Designation FROM TableEssai")
                rst.NewRow()
                rst.Field(1) = TextBox1.Text
                rst.Update()
                rst.Dispose()
                DB.Dispose()
            Catch ex As Exception
                MsgBox("Erreur de communication avec le serveur SQL.")
            End Try
            AfficherListe()
        End Sub
     
        Private Sub AfficherListe()
            ReDim Tab(0)
            Try
                DB = New SQLServeur(SERVEUR, "TEST")
                rst = DB.RequeteRd("SELECT Id, Designation FROM TableEssai")
                PlaceHolder1.Controls.Add(New LiteralControl("<table border='1'><tr><td>Id</td><td>Designation</td><td>Supprimer ?</td></tr>"))
                Do Until rst.EOF = True
                    ReDim Preserve Tab(Tab.Length)
                    Tab(Tab.Length - 1).Id = rst.Field(0)
                    Tab(Tab.Length - 1).Designation = rst.Field(1)
                    MaCheckBox = New System.Web.UI.WebControls.CheckBox
                    PlaceHolder1.Controls.Add(New LiteralControl("<tr><td>" & Trim(rst.Field(0)) & "</td><td>" & Trim(rst.Field(1)) & "</td><td>"))
                    MaCheckBox.ID = "Check" & rst.Field(0)
                    PlaceHolder1.Controls.Add(MaCheckBox)
                    PlaceHolder1.Controls.Add(New LiteralControl("</td></tr>"))
                    MaCheckBox.Dispose()
                    rst.MoveNext()
                Loop
                PlaceHolder1.Controls.Add(New LiteralControl("</table>"))
                rst.Dispose()
                DB.Dispose()
            Catch ex As Exception
                MsgBox("Erreur de communication avec le serveur")
            End Try
        End Sub
     
        Protected Sub form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles form1.Load
            If Me.IsPostBack = False Then
                AfficherListe()
            End If
        End Sub
     
        Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
            Dim c As CheckBox
            Dim cmp As Integer
            AfficherListe()
            For cmp = 0 To Tab.Length - 1
                c = New CheckBox
                c = PlaceHolder1.FindControl("Check" & Tab(cmp).Id)
                If IsNothing(c) = False Then
                    If (c.Checked) Then
                        Try
                            DB = New SQLServeur(SERVER, "TEST")
                            rst = DB.RequeteRd("SELECT Id, Designation FROM TableEssai WHERE Id =" & Tab(cmp).Id)
                            If rst.EOF = False Then
                                rst.DeleteRow()
                                rst.Update()
                            End If
                            rst.Dispose()
                            DB.Dispose()
                        Catch ex As Exception
                            MsgBox("Erreur de communication avec le serveur")
                        End Try
                    End If
                End If
            Next
            PlaceHolder1.Dispose()
        End Sub
    PS : En ce qui concerne la gestion des base de données j'utilise mes propres classes...

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    360
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 360
    Points : 486
    Points
    486
    Par défaut
    peux tu stp montrer ton aspx enfin du moins la parties où tu abonnes tes boutons

  18. #18
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 235
    Points : 183
    Points
    183
    Par défaut
    Voila la partie de mon aspx qui concerne les boutons :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
            <asp:Button ID="Button1" runat="server" Text="Ajouter" />&nbsp;
            <br />
            <br />
            <asp:placeholder id="PlaceHolder1" runat="server" />
            <br />
            <asp:Button ID="Button2" runat="server" Text="Supprimer les lignes cochées"/>
            <br />
    Je comprend pas le fonctionnement...

    Chargement de la page -> Form1.Load() -> AfficherListe()
    La page est chargée.
    Clique sur le bouton "Ajouter une ligne" -> Form1.Load() -> Button1_Click() -> AfficherListe()
    La Page est chargée avec la nouvelle ligne dans la liste.
    Clique sur le bouton "Supprimer une ligne" -> Form1.Load() -> Button2_Click() -> Erreur : le tableau Tab n'existe pas car le prog n'est pas passé par la fonction AfficherListe(). Mais si après le Load je rempli mon tableau Tab, et je réaffiche la liste, j'ai perdu les cases qui étaient cochées... donc je vois pas la solution...

Discussions similaires

  1. utiliser une CheckBox créée dynamiquement
    Par duthooma dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/08/2008, 21h29
  2. Message pour une checkbox créée dynamiquement
    Par g0up1l dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 30/03/2007, 12h19

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