Remplir un TreeView à l'aide d'une table.
Bonjour à tous, voici mon problème:
J'ai une table dans mon DataSet que je voudrais "convertir" en un TreeView
Voici un exemple: http://img175.imageshack.us/img175/9563/treeh.jpg
- 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:
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:
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);
}
}
}
} |