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 :

[C#][2.0] Intercepter un évènement généré


Sujet :

ASP.NET

  1. #1
    Invité
    Invité(e)
    Par défaut [C#][2.0] Intercepter un évènement généré
    Bonsoir,

    J'ai un petit problème dont je ne trouve désespérement aucune solution.

    Je génère un tableau HTML dont une de ses colonnes comporte des CheckBoxes.
    J'aimerai que lorsque l'utilisateur clique sur une des checkboxes, la ligne soit automatiquement supprimer. Il suffit donc d'intercepter l'évènement "CheckedChanged" de la checkbox et de faire son traitement.

    J'ai regardé sur la FAQ Asp.Net (ici) comment intercepter un évènement d'un webcontrol généré mais ça ne marche pas et je ne vois pas où je me suis trompé.

    Voici ce que j'ai fait.

    Pour chaque ligne de mon tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                    CheckBox chckbx = new CheckBox();
                    chckbx.CheckedChanged += new EventHandler(CheckBox_Checked);
                    chckbx.AutoPostBack = true;
                    HtmlTableCell HtmlCellCheckBox = new HtmlTableCell();
                    HtmlCellCheckBox.Controls.Add(chckbx);
                    HtmlRowNouveauRisque.Cells.Add(HtmlCellCheckBox);
    Et voici l'évènement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        private void CheckBox_Checked(object sender, EventArgs e)
        {
            CheckBox chk;
            chk = (CheckBox)sender;
     
           // Traitement
        }
    Si quelqu'un a déjà eu à faire ce genre de manip', ça m'intéresserait vivement

    Merci de votre réponse !

  2. #2
    Membre éprouvé

    Inscrit en
    Juin 2005
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 142
    Par défaut
    il faut que ta checkbox a son autopostback à true

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Février 2004
    Messages
    862
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 862
    Par défaut
    Citation Envoyé par slyer
    il faut que ta checkbox a son autopostback à true
    3e ligne de code : chckbx.AutoPostBack = true;

    Citation Envoyé par Bibins
    J'ai un petit problème dont je ne trouve désespérement aucune solution.
    Symptome classique d'un petit problème d'ordre des évenements...

    Dans quelle évenement de ta page lances-tu la création de ton tableau ?

    Est-ce que tu recrées le tableau à chaque postback ou tu comptes sur le viewstate ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Rebonsoir,

    Je n'utilise effectivement pas le viewstate pour stocker mon tableau. Il se recréé à chaque postback.

    Quant à sa création, je le fait lors du PreRender.

    Je devine que mon erreur n'est pas loin , n'est-ce pas ?

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Février 2004
    Messages
    862
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 862
    Par défaut
    Citation Envoyé par Bibins

    Je devine que mon erreur n'est pas loin , n'est-ce pas ?
    Exact, lors du PreRender c'est trop tard...

    Idéalement, essaie de le faire dans CreateChildControls()

  6. #6
    Invité
    Invité(e)
    Par défaut
    Effectivement, ça marche impec dans le CreateChildControls()... c'était vraiment tout bête. Enfin, il faut quand même bien connaître le cycle de vie d'une page...

    J'ai trouvé un article sur la MSDN intéressant à propos de ça :ASP.NET Page Life Cycle Overview (pour ceux que ça intéresse).
    Je vais le lire pour éviter de refaire ce genre d'erreur par la suite

    Une petite dernière question, est-il possible de récupérer l'index de la ligne du tableau généré où la checkbox a été coché ?

    [EDIT] : Bon j'ai trouvé, voici le code pour ceux que ça intéresse.

    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
    private void CheckBox_Checked(object sender, EventArgs e)
        {
            // Récupération du contrôle qui a déclenché l'évènement
            CheckBox chk;
            chk = (CheckBox)sender;
            // Pour chaque ligne du tableau
            for (int i=0; i<HtmlTableNouveauRisque.Rows.Count; i++)
            {
                // Parcours de la colonne des checkboxes
                if (HtmlTableNouveauRisque.Rows[i].Cells[5].Controls.Contains(chk))
                {
                    HtmlTableNouveauRisque.Rows.RemoveAt(i);
                    break;
                }
            }
            // Affichage du tableau
           PlaceHolder_NouveauRisque.Controls.Add(HtmlTableNouveauRisque);
    Merci beaucoup Keihilin pour ton aide.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/08/2003, 13h43
  2. Interception du signal SIGINT
    Par macleod dans le forum MFC
    Réponses: 2
    Dernier message: 01/07/2003, 18h39
  3. Interception des commandes in et out
    Par KDD dans le forum x86 16-bits
    Réponses: 13
    Dernier message: 18/12/2002, 16h55
  4. [VB6] Intercepter le printscreen
    Par Rami dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 22/10/2002, 18h21
  5. [VB6] Interception des évènement Copier/Couper/Coller
    Par youtch dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 18/10/2002, 17h09

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