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 :
ainsi qu'un délégué :
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; } }
Voici une classe partielle abstraite qui instancie les évènements :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 public delegate void EZAdvencedTreeViewNodeExpandedEventHandler(object sender, EZAdvancedTreeViewExpandEventArgs 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.
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); } } } }
J'ai trouvé ce code :
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 protected override void OnPreInit(EventArgs e) { base.OnPreInit(e); Load += new EventHandler(Page_Load); }
Je pense qu'il faut empiler les évènements mais je ne sais pas faire.
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); }
Quelqu'un pourrait m'aider ?
D'avance merci
Laurent
, je ne sais pas comment et surtout quand forcer le déclenchement du pré init
Partager