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 :

[ASP .NET 2] Suppression controles dynamiquement créés


Sujet :

ASP.NET

  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 1
    Par défaut [ASP .NET 2] Suppression controles dynamiquement créés
    Hello,

    Ayant pas mal cherché par moi même ainsi que sur le net, et n'ayant pas trouvé de réponse satisfaisante, je vous expose mon problème :

    Le principe est une page simple, un bouton pour ajouter dynamiquement des controles. Un bouton pour valider la page.
    Jusque là, aucun problème. Là où ça coince, c'est quand je veux supprimer les controles créés dynamiquement ...

    Voici un exemple de code : je génére des boutons à la volée lors du clic sur le bouton "Ajouter", et j'aimerais que le bouton sur lequel on clique ensuite soit détruit (la page ne sert à rien comme ca mais elle illustre bien le problème).

    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
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    public class DOPForm : WebControl
        {
            private List<string> Controles
            {
                get
                {
                    if (ViewState["Controles"] == null)
                        ViewState["Controles"] = new List<string>();
     
                    return (List<string>)ViewState["Controles"];
                }
     
                set
                {
                    ViewState["Controles"] = value;
                }
            }
     
            Table tablePrincipale = new Table();
     
            Button boutonAjout = new Button();
            Button btValider = new Button();
     
            public DOPForm()
            {
            }
     
            protected override void OnLoad(EventArgs e)
            {
                base.OnLoad(e);
     
                if (Page.IsPostBack)
                {
                    foreach (string i in Controles)
                    {
                        Button tb = new Button();
                        tb.ID = i.ToString();
                        tb.UseSubmitBehavior = false;
                        tb.Text = tb.ID;
                        Controls.Add(new LiteralControl("<br />"));
                        Controls.Add(tb);
                        Controls.Add(new LiteralControl("<br />"));
                    }
                }
            }
     
            protected override void OnInit(EventArgs e)
            {
                base.OnInit(e);
     
                boutonAjout.Click += new EventHandler(ajout_Click);
                btValider.Click += new EventHandler(btValider_Click);
            }
     
            void btValider_Click(object sender, EventArgs e)
            {
                int i = 2;
            }
     
            void ajout_Click(object sender, EventArgs e)
            {
                string newGuid = Guid.NewGuid().ToString();
     
                Button tb = new Button();
                tb.ID = newGuid;
                tb.Text = tb.ID;
     
                Controls.Add(new LiteralControl("<br />"));
                Controls.Add(tb);
                Controls.Add(new LiteralControl("<br />"));
     
                Controles.Add(newGuid);
            }
     
            protected override void CreateChildControls()
            {
                base.CreateChildControls();
                Controls.Add(boutonAjout);
                boutonAjout.ID = "btAjout";
                boutonAjout.Text = "+ Ajouter";
     
                btValider.Text = "Valider";
                Controls.Add(new LiteralControl("<br />"));
                Controls.Add(btValider);
                Controls.Add(new LiteralControl("<hr />"));
            }
        }

    Le problème est que si je clique sur le bouton, l'événement "click" de ce dernier est lancé trop tard ... juste apres que tous les autres controles aient été créés dans le OnLoad (je dois les créer ici sinon les événements ne sont pas attachés).

    La seule solution que j'ai trouvé pour le moment est de regarder, avant le OnLoad, dans le Page.Request.Form.Allkeys pour voir quel bouton a été utilisé pour lancer le PostBack et ainsi ne plus le recréer ... mais je trouve ca assez moche.

    Donc est-ce que quelqu'un aurait une idée pour résoudre ce problème ?

    Merci !!!

  2. #2
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.Controls.Remove(...)
    + modif du ViewState

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/03/2010, 14h22
  2. Réponses: 11
    Dernier message: 20/10/2009, 16h23
  3. Réponses: 2
    Dernier message: 02/01/2008, 00h40
  4. [VB.NET] Ajout de controles dynamiquement
    Par A77 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 25/04/2005, 09h00
  5. [CR9] [D2005] [ASP.NET WEB App] Création dynamique d'un état
    Par Crystalou dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 09/03/2005, 09h21

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