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 :

[3.5] Propagation d'évènements dans une pile de contrôles de même type


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    CUCARACHA
    Invité(e)
    Par défaut [3.5] Propagation d'évènements dans une pile de contrôles de même type
    Salut,

    J'ai développé un composant type branche d'arbre qui est un peu plus évolué que les TreeNodes natives.

    Ce contrôle affiche les données de la branche dans une <tr> et ses descendants dans une seconde <tr> escamotable.

    Le contrôle s'appelle EZAdvancedTreeViewNode

    J'ai créé un EventArg comme suit :
    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
     
        public class EZAdvancedTreeViewExpandEventArgs : EventArgs
        {
            public int NodeId { get; set; }
            public string NodeFullPath { get; set; }
            public bool RefreshChildren { get; set; }
            public EZAdvancedTreeViewNode InitialSender { get; set; }
            public EZAdvancedTreeViewExpandEventArgs(int nodeId, string nodeFullPath, bool refreshChildren,EZAdvancedTreeViewNode initialSender)
            {
                this.NodeId = nodeId;
                this.NodeFullPath = nodeFullPath;
                this.RefreshChildren = refreshChildren;
                this.InitialSender = initialSender;
            }
        }
    ainsi qu'un délégué :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public delegate void EZAdvencedTreeViewNodeExpandedEventHandler(object sender, EZAdvancedTreeViewExpandEventArgs e);
    Voici une classe partielle abstraite qui instancie les évènements :
    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
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
     
    namespace EZ.Objects.PresentationLayer.Components.EZAdvancedTreeViewObjects
    {
        public abstract class AdvancedTreeViewBase : System.Web.UI.UserControl
        {
            public event EZAdvencedTreeViewNodeCheckedChangedEventHandler CheckedChanged;
            protected virtual void onCheckedChanged(EZAdvancedTreeViewEventArgs e)
            {
                EZAdvencedTreeViewNodeCheckedChangedEventHandler newHandler = CheckedChanged;
                if (newHandler != null)
                {
                    newHandler(this, e);
                }
            }
            public event EZAdvencedTreeViewNodeExpandedEventHandler NodeExpand;
            protected virtual void onNodeExpand(EZAdvancedTreeViewExpandEventArgs e)
            {
                EZAdvencedTreeViewNodeExpandedEventHandler newHandler = NodeExpand;
                if (newHandler != null)
                {
    //newHandler toujours null si profondeur supérieure à 1
                    newHandler(this, e);
                }
            }
        }
    }
    Le contrôle ainsi généré capte bien les évènements du premier niveau (de profondeur) mais je comporte tout à fait aléatoirement pour les niveaux suivants.

    J'ai trouvé ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    protected override void OnPreInit(EventArgs e)
    {
        base.OnPreInit(e);
        Load += new EventHandler(Page_Load);
    }
    qui devrait me permettre de bien instancier mes évenments mais, comme je fabrique dynamiquement les contrôles enfants (puisque il n'est pas possible de référencer un contrôle dans lui mê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
     
    protected override void CreateChildControls()
            {
    ...
       imb.Click += new ImageClickEventHandler(imb_Click);
    ...
            }
     
            protected void imb_Click(object sender, ImageClickEventArgs e)
            {
                this.Expanded = !this.Expanded;
                CreateChildControls();
                //Execution du premier évènement déclaré sous la page
                this.onNodeExpand(new EZAdvancedTreeViewExpandEventArgs(this.NodeId, this.NodesIdPath, true, this));
     
            }
     
            protected void N_NodeExpand(object sender, EZAdvancedTreeViewExpandEventArgs e)
            {
    //Propagation de l'évènement entre les couches
                   onNodeExpand(e);
            }
    Je pense qu'il faut empiler les évènements mais je ne sais pas faire.

    Quelqu'un pourrait m'aider ?

    D'avance merci

    Laurent

    , je ne sais pas comment et surtout quand forcer le déclenchement du pré init

  2. #2
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Salut
    Citation Envoyé par Laurent Jordi Voir le message
    je ne sais pas comment et surtout quand forcer le déclenchement du pré init
    Pourquoi veux-tu forcer le déclenchement du pré-init?
    Quelles fonctionnalités avancées te font préférer ton controle à un controle natif ou déjà développé?

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  3. #3
    CUCARACHA
    Invité(e)
    Par défaut
    Je ne voudrais pas que nous nous égarions sur la pertinence de mes choix ou des contraintes auxquelles je dois faire face mais le contrôle TreeView ne me convient pas.

    Nous travaillions en couches, en conséquence, seule la page a le droit d'attaquer la couche business et en aucun cas le contrôle.

    Mon erreur est sans doute de vouloir donner du sens à la couche de présentation mais il faut que chaque branche puisse avoir un comportement indépendant des autres, par exemple, afficher ou non la case à cocher. Autoriser ou non le repositionnement de la branche dans l'arbre et surtout conserver sa structure lorsque l'on la refermer et la réouvre.

    J'ai déjà créé un tel contrôle composé de plusieurs sous contrôles différents. Là ça fonctionne bien car il n'y a pas de référence circulaire. Le problème vient du fait que j'empile toujours le même contrôle et le Event Handler semble se faire des noeuds. Je n'exclus pas du tout que ce soit ma faute mais je cherche à mieux comprendre ce event handler.

    ++

    Laurent

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 502
    Par défaut
    Je ne vois pas comment interagit votre contrôle au niveau du cycle de vie de la page.
    Pouvez-vous nous donner les différents éléments misent en place à chaque étape du cycle de vie de la page ?

Discussions similaires

  1. Réponses: 10
    Dernier message: 20/02/2009, 11h25
  2. Réponses: 5
    Dernier message: 07/08/2008, 18h53
  3. Définir des événements dans une classe
    Par Masmeta dans le forum Windows Forms
    Réponses: 5
    Dernier message: 29/04/2008, 17h41
  4. échange de valeur dans une pile
    Par yohan0262 dans le forum C++
    Réponses: 15
    Dernier message: 29/11/2007, 16h53
  5. Perte de gestionnaire d'événements dans une fenêtre
    Par Benjamin GAGNEUX dans le forum Composants VCL
    Réponses: 15
    Dernier message: 23/08/2004, 20h14

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