J'ai besoin d'afficher sous la forme d'un arbre les données d'une grosse base de données. La méthode bête consiste à récupérer toutes les données d'un coup et laisser l'utilisateur naviguer dedans.
Une méthode plus fine est de ne charger que le premier niveau de noeuds, et lorsque l'utilisateur clique sur le signe "+" à côté d'un noeud, d'aller chercher les données correspondantes au niveau suivant en base. Bref, de charger au fur et à mesure (dynamiquement) les données.
Cependant, s'il n'y a pas de noeuds sous les noeuds de premier niveau, le signe "+" ne s'affichera pas à côté de ceux-ci. Comment l'afficher? Le TreeView des Windows Forms ne semble pas le permettre, contrairement à celui des WebForms qui prévoit l'affichage dynamique.
Je n'ai rien trouvé de mieux que d'ajouter un sous-noeud temporaire, que je supprime au moment ou l'utilisateur veut voir les sous noeuds. Ce n'est pas très satisfaisant, mais ça marche comme sur des roulettes. Le code suit.
Lors de la création d'un noeud t:
TreeNode dummyNode = new TreeNode("");
dummyNode.Tag = DummyNodeTag;
t.Nodes.Add(dummyNode);
Puis on traite l'expansion du noeud:
protected override void OnBeforeExpand(TreeViewCancelEventArgs e)
{
if(e.Node.Nodes.Count == 1 && (e.Node.Nodes[0].Tag is string) && ((string)e.Node.Nodes[0].Tag) == DummyNodeTag)
{
e.Node.Nodes.Clear();
// Ajout des noeuds
...
}
base.OnBeforeExpand(e);
}
Une méthode plus fine est de ne charger que le premier niveau de noeuds, et lorsque l'utilisateur clique sur le signe "+" à côté d'un noeud, d'aller chercher les données correspondantes au niveau suivant en base. Bref, de charger au fur et à mesure (dynamiquement) les données.
Cependant, s'il n'y a pas de noeuds sous les noeuds de premier niveau, le signe "+" ne s'affichera pas à côté de ceux-ci. Comment l'afficher? Le TreeView des Windows Forms ne semble pas le permettre, contrairement à celui des WebForms qui prévoit l'affichage dynamique.
Je n'ai rien trouvé de mieux que d'ajouter un sous-noeud temporaire, que je supprime au moment ou l'utilisateur veut voir les sous noeuds. Ce n'est pas très satisfaisant, mais ça marche comme sur des roulettes. Le code suit.
Lors de la création d'un noeud t:
TreeNode dummyNode = new TreeNode("");
dummyNode.Tag = DummyNodeTag;
t.Nodes.Add(dummyNode);
Puis on traite l'expansion du noeud:
protected override void OnBeforeExpand(TreeViewCancelEventArgs e)
{
if(e.Node.Nodes.Count == 1 && (e.Node.Nodes[0].Tag is string) && ((string)e.Node.Nodes[0].Tag) == DummyNodeTag)
{
e.Node.Nodes.Clear();
// Ajout des noeuds
...
}
base.OnBeforeExpand(e);
}
Comments