Bonjour,
Je suis en train de développer une page contenant un contrôle TreeView.
Je ne maîtrise pas tout à fait ce composant et j'aimerais poser quelques questions.
Présentation de mon TreeView
Je remplis mon TreeView à partir d'informations issues d'une base de données.
J'ai pas de DataSource pour le treeview.
Ce que je fais actuellement pour peupler mon Treeview :
- Je choisit un couple année/mois dans une dropDownList
- je fais ma requête en base de données avec en paramètre l'année et le mois choisis.
- J'enregistre les résultats dans une liste que je met en variable de session.
- Je peuple mes différentes nodes (les différents niveaux hiérarchiques) de mon TreeView dynamiquement quand je développe une node. Grâce à la propriété PopulateOnDemand et l'évènement PopulateNode.
Dans PopulateNode, j'applique une logique de peuplement à partir de ma liste en variable de session.
En gros :
=> node racine, niveau 0 = Couple mois/année sélectionnée dans la dropDownList
=> node niveau 1 = Jours : (ma source de données me renvoie tous mes objets modifiés durant le mois sélectionnée. J'affiche la liste des jours où j'ai effectué des modifications.)
=> node niveau 2 = Utilisateur : (liste des utilisateurs ayant modifié les données durant le jour séléctionné)
Ce que je veux faire
Actuellement, j'arrive à peupler le treeview, mais qu'une seule fois.
Ce que je veux faire, c'est que quand je sélectionne un autre couple mois année dans ma dropdownlist, que mon treeview soit modifié en conséquence.
Et là je bloque. Je sais pas comment faire.
Quand ma dropDownList change, je récupère mon couple (mois/année), je fais ma requête en base de données avec ces paramètres et je récupère une liste.
Donc j'ai ma liste de données pour le treeview, pour le couple/mois année sélectionné, et après qu'est ce que je fais ??
Comment faire pour lier cette nouvelle source de données à mon treeview, à la place de l'ancienne ?
J'ai l'impression que je ne peux plus appeler l'évènement PopulateNode...
Je pensais peut être à 'rétracter' jusqu'au noeud racine pour ensuite pouvoir le repeupler dynamiquement quand je développe les nodes...
Mon Treeview garde en mémoire les anciennes données..
Pouvez vous m'aider ??
[EDIT]
J'ai trouvé.
Tout simplement, dans mon évènement 'SelectedIndexChanged' de ma DropDownList, après avoir récupéré ma nouvelle source de données et l'avoir mis en variable de session, j'appelle la méthode CollapseAll() sur mon TreeView.
Grâce à elle, mon Treeview se "rétracte" jusqu'au noeud racine et quand je le re-développe, l'évènement "PopulateNode" est appelé.
Et donc après, les différentes méthodes (GetMonths, GetDays, GetUsers) utilisent bien la nouvelle liste de donnée pour repeupler les nodes.
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 protected void TreeView1_PopulateNode(object sender, TreeNodeEventArgs e) { switch (e.Node.Depth) { case 0: GetMonths(e.Node); break; case 1: GetDays(e.Node); break; case 2: GetUsers(e.Node); break; } }
=> En fait non j'ai re-testé et ça ne fonctionne pas du tout comme ça.
Quand je re-développe mon TreeView, après l'avoir fermé avec ColapseAll(), les données sont les anciennes données.
Le programme ne passe plus par les évènement PopulateNode.
Mais c'est un peu le comportement que je souhaiterais obtenir en fait, que l'évènement PopulateNode soit appelé à chaque fois.
Comment faire cela ? C'est possible ?
[/EDIT]
Partager