Bonjour à tous.
Je vous présente ma situation :
J'ai une table dans une BD qui contient plein de nom de catégories. Chaque catégorie contient un champ nommé "CatégorieMere" qui défini la Catégorie mère de celle-ci. Les grandes catégories (ROOT) possèdent une valeur vide à ce champ.
Par exemple :
NomCategorie : "Objet3D" CatégorieMere : ""
NomCategorie : "Table" CategorieMere : "Objet3D"
NomCategorie : "Bois" CategorieMere : "Table"
NomCategorie : "Personnage" CategorieMere : ""
Vous voyez donc la logique, comme quoi que dans mon arborescence, l'Objet Table se trouvera en dessous d'Objet 3D.
J'ai positionné un combobox en readonly (je ne peux donc écrire dedans) qui trouve les catégories meres et me les affichent. En fonction de celle que je sélectionne dans ce combobox, l'arborescence se construira, mais uniquement les catégories descendantes de la catégorie-mère sélectionnée. Par ailleurs, chaque catégorie peut aussi être une catégorie-mère. Je dois donc effectuer une recursive afin de toujours vérifier que la dernière catégorie inscrite n'est pas la catégorie-mère d'une autre. Donc, une catégorie pourrait se trouver seule et sans enfants, tandis qu'une autre pourrait en avoir un nombre x, et ceux-ci aussi.
J'ai de la misère à figurer la récursive. Jusqu'à présent, j'ai réussi à afficher les catégories en dessous de "Objet3D" qui est une catégorie ROOT. Voilà ce que j'ai pour l'instant :
Code :
- void FormulairePrincipalAvance::CreerArborescence(String* sNomCategorieMere)
- {
- CCategorie* oCategorie;
- for (int i = 0; i < arCategories->Count; i++)
- {
- oCategorie = reinterpret_cast<CCategorie*>(arCategories->get_Item(i));
- if (oCategorie->get_NomCategorieMere()->Equals(sNomCategorieMere))
- {
- TreeNode* TreeItem;
- for (int i = 0; i < tViewItems->Nodes->Count; i++)
- {
- TreeItem = tViewItems->Nodes->get_Item(i);
- if (TreeItem->Text->Equals(sNomCategorieMere))
- {
- TreeItem = TreeItem->Nodes->Add(oCategorie->get_NomCategorie());
- }
- }
- }
- }
- }
|
Les objets CCategories sont en fait une représentation via une classe de la BD. Je charge tout ce que j'ai dans ma BD dans des objets mémoire pour améliorer le temps et ne pas être dépendant de la BD en tout temps.
Donc ma question est, comment structurer mon programme et mes appels afin d'effectuer une récursive ? La fonction ci-haut vérifie en fait 1 couche du TreeView pour une catégorie-mère spécifique. J'ai un nombre indéterminé de couches dans mon TreeView, je ne peux donc pas faire une boucle statique ou encore vérifier combien j'ai de couches ou items dans mon treeview, puisqu'il est en construction ! Je peux aussi avoir plusieurs catégories par couche (un objet "Table" et un objet "Chaise" directement sous "Objet3D" par exemple).
Merci de toute aide
Message édité par Alpha Leader le 24-02-2006 à 05:19:38