Bonjour à tous, voici mon problème:
J'ai une table dans mon DataSet que je voudrais "convertir" en un TreeView
Voici un exemple:
- Chaque composant peut être composé d'autres composant, c'est donc beaucoup plus claire d'afficher tout ça dans un TreeView.
- Comme vous pouvez le voir je veux afficher Dans une même branche les composants d'un même niveau
et les composants doivent être reliés à leur composant père.
- De plus un même composant peut être fabriqué sur des postes différents (Comme le B) mais il doit apparaitre qu'une seule fois dans le Tree.
- Je pense que l'on peut faire ça avec une fonction récursive mais je ne sais pas comment l'implémenter.
- Voila ce que j'ai essayé de faire mais je ne récupère que le composant A et ses 2 composants fils B et C:
Merci à vous!
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 this.treeView1.BeginUpdate(); this.treeView1.Nodes.Clear(); int nb = (int)this.BindingContext[dataset1, "MaTable"].Count; this.BindingContext[dataset1, "MaTable"].Position = 0; this.BindingContext[dataset2, "MaTable"].Position = 0; this.treeView1.Nodes.Add(new TreeNode(this.BindingContext[dataset2, "MaTable.Composant"].Current.ToString())); for (int i = 0; i < nb; i++) { this.BindingContext[dataset1, "MaTable"].Position = i; if (this.BindingContext[dataset1, "MaTable.Composant_Pere"].Current.ToString().Equals(this.BindingContext[dataset2, "MaTable.Composant"].Current.ToString())) { this.treeView1.Nodes[0].Nodes.Add(new TreeNode(this.BindingContext[dataset1, "MaTable.Composant"].Current.ToString())); } } Cursor.Current = Cursors.Default; this.treeView1.EndUpdate();
J'ai finallement réussi! Voici mon code pour les intéréssés:
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 public void CompleteTree(TreeNode node, int nbRows) //Fonction récursive { for (int i = 0; i < nbRows; i++) { Boolean flag = false; this.BindingContext[dataset, "MaTable"].Position = i; if (this.BindingContext[dataset, "MaTable.Composant_Pere"].Current.ToString().Equals(node.Text) { TreeNode fils = new TreeNode(this.BindingContext[dt, "MaTable.Composant"].Current.ToString()); int nbNodes = node.Nodes.Count; foreach(TreeNode tn in node.Nodes) if (fils.Text.Equals(tn.Text)) //Pour éviter les doublons comme le composant B. flag = true; if (!flag) { node.Nodes.Add(fils); CompleteTree(fils, nbRows); } } } }
Partager