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 :

[Controle Template] Gérer les évènements de contrôles définis dans un template


Sujet :

ASP.NET

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 42
    Points : 29
    Points
    29
    Par défaut [Controle Template] Gérer les évènements de contrôles définis dans un template
    Bonjour,

    J'ai surchargé le composant GridView pour modifier un peu les fonctionnalités du pagineur. Notamment, j'y ai inséré un contrôle Template pour y faire figurer des ImageButton (qui servent en cas d'actions à effectuer sur des sélections multiples).

    Pour la création de ce controle template, j'ai suivi le tutoriel Introduction aux contrôles templates dispo sur ce site.

    Un problème, pour le gridView, est que j'ai beau ajouter mon contrôle dans la méthode CreateChilControl, au rendu, il ne reste que le tableau du gridview.

    J'ai donc après plusieurs tentatives infrucuteuses, inséré mon contrôle dans la méthode "AddedControl", ce qui permet le rendu des contrôle template.

    En revanche, les évènement associés aux boutons du contrôle template ne se déclenchent pas, et c'est sur ce point que je coince completement :

    Voici le code du mon contrôle (simplifié) :

    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
     
        [ToolboxItem(false)]
        public class TemplateItem : Control, INamingContainer
        {
        }
     
     
        [ParseChildren(true)]
        public class userGridView : GridView
        {
            private ITemplate _multiSelectControlsTemplate = null;
            [Browsable(false), DefaultValue(null), PersistenceMode(PersistenceMode.InnerProperty), TemplateContainer(typeof(TemplateItem))]
            public ITemplate MultiSelectControlsTemplate
            {
                get { return _multiSelectControlsTemplate; }
                set { _multiSelectControlsTemplate = value; }
            }
     
            public override ControlCollection Controls
            {
                get { EnsureChildControls(); return base.Controls; }
            }
     
     
     
            protected override void CreateChildControls()
            {
                base.CreateChildControls();
     
                // plus rien, car ça marche pas
            }
     
     
            protected override void AddedControl(Control control, int index)
            {
                base.AddedControl(control, index);
                // insertion du template controle
                if (FindControl("_panel") == null)
                {
                    // On crée un panel caché
                    Panel panelCache = new Panel();
                    panelCache.ID = "_panel";
                    panelCache.Attributes["style"] = "display:none";
     
                    //Ajout du template controle
                    if (_multiSelectControlsTemplate != null)
                    {
                        TemplateItem _multiSelect = new TemplateItem();
                        MultiSelectControlsTemplate.InstantiateIn(_multiSelect);
                        panelCache.Controls.Add(_multiSelect);
                    }
                    // Ajout du panel
                    Controls.Add(panelCache);
                }
            }
     
            protected override void OnPreRender(EventArgs e)
            {
                base.OnPreRender(e);
                /* ... */
                if (FooterRow != null)
                {
                    /* ... */
                    Panel tmp = (Panel) FindControl("_panel");
                    if(tmp != null)
                        this.FooterRow.Cells[0].Controls.Add(tmp.Controls[0]);
                }
            }
        }

    Et le code contenu dans le template du gridview personnalisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <cc1:userGridView ID="GridView1" runat="server"
         AutoGenerateColumns="False" AllowPaging="True" 
         ShowFooter="True">
                <MultiSelectControlsTemplate>
                    <asp:ImageButton ID="btSupprEns" runat="server" 
                            ImageUrl="~/Images/icons/cross.png"
                            OnClick="btSupprEns_Click"
                            CommandName="SupprEns"/>
                </MultiSelectControlsTemplate>
                <!-- ... -->
    </cc1:userGridView>
    Je ne sais pas si mon erreur concerne l'insertion du contrôle template dans le gridview ou si c'est la gestion du contrôle template en lui même qui est incomplete (genre viewstate ou autre).

    Voilà, j'espère que vous aurez des propositions de solution à me donner

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Points : 581
    Points
    581
    Par défaut
    essai de ne pas setter toi même l'id laisse gerer asp.net.

    Il se peut que ton problème vienne de la pour tes évenements.

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/04/2014, 01h43
  2. Réponses: 13
    Dernier message: 30/05/2012, 10h42
  3. [C#/Custom Control] Comment personnaliser les évènements des contrôles enfants ?
    Par Anto03 dans le forum Windows Presentation Foundation
    Réponses: 21
    Dernier message: 26/09/2008, 08h45
  4. Réponses: 26
    Dernier message: 30/07/2007, 12h09
  5. Réponses: 5
    Dernier message: 25/07/2005, 09h29

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