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:
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();
Merci à vous!

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); 
            }
        }
    }
}