Sachant que je n'ai aucun moyen apparemment de prédire la profondeur de chaque noeud et que le nombre de noeuds enfants est variable.
J'ai alors essayé avec :
TLC.TLGetMySQLTestSuites("1"); //Récupération des Suites de premier niveau
for (int i = 0; i < TLC.tabGetMySQLSuites.GetLength(0); i++)
{ //Ajout des Suites de premier Niveau
TreeNode tn = treeView3.Nodes.Add(TLC.tabGetMySQLSuites.GetValue(i, 1).ToString());
tn.Name = TLC.tabGetMySQLSuites.GetValue(i, 0).ToString();
}
int Checked = 0;
while (Checked < treeView3.GetNodeCount(true)) //tant que le nombre de treenode checked < nb treenode total
{
foreach (TreeNode tnode in treeView3.Nodes) //récupération des nodes de treeview3
{
if (tnode.Nodes.Count 0 || tnode.Checked false)
{
TLC.TLGetMySQLTestSuites(tnode.Name);
if (TLC.tabGetMySQLSuites.GetValue(0, 0).ToString() != "0")
{
for (int i = 0; i < TLC.tabGetMySQLSuites.GetLength(0); i++)
{
//Ajout des Suites enfants
TreeNode tn = tnode.Nodes.Add(TLC.tabGetMySQLSuites.GetValue(i, 1).ToString());
tn.Name = TLC.tabGetMySQLSuites.GetValue(i, 0).ToString();
}
}
else
{
tnode.Checked == true;
}
}
else
{
tnode.Checked == true;
}
treeView3.Refresh();
treeView3.ExpandAll();
}
// Permet de comparer le nombre de noeuds aux suites
Checked = 0;
int nodecount = treeView3.GetNodeCount(true);
foreach (TreeNode tn in treeView3.Nodes)
{
if (tnode.Checked == true)
{
Checked++;
}
}
}
Le Problème c'est que treeview3.nodes ne me renvoi que les premiers noeuds or j'aimerai une collection de tous les noeuds de la treeview.
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201548 20 janv. 2010 à 10:13
Salut
La méthode la plus simple pour remplir un arbre de cette manière est une méthode récursive :
void maFonctionRecursive(int? idParent, TreeNodesCollection nodes)
{
// On récupère l'ensemble des enfants du noeud actuel depuis la BDD
IEnumerable<ElementTable> nodesFromDB = DataAccessLayer.GetWhereParentIs(idParent);
// Pour chaque donnée enfant
foreach(ElementTable element in nodesFromDB)
{
// On crée un nouveau noeud, que l'on remplit
TreeNode tn = new TreeNode();
tn.Text = element.Name;
// On ajoute ce noeud créé aux enfants du noeud parent
nodes.Add(tn);
// Puis on rappelle cette même fonction sur ce noeud
// pour voir si lui-même a des enfants
maFonctionRecursive(element.ID, tn.Nodes);
}
}
Tu appelles cette fonction comme ceci :
maFonctionRecursive(null, MonTreeView.Nodes);
Ta fonction DataAccessLayer.GetWhereParentIs(int? id) te renvoie donc un tableau d'ElementTable, une simple structure qui possède les valeurs de chaque champ de ta table (j'aurais bien mis un nom plus explicite, mais tu n'as pas expliqué exactement ce que seront tes données).
Krimog : while (!(succeed = try())) ; - Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -