2010-11-01 5 views
0

après peaufinage mon code pour un peu j'ai fini avec ce petit code preuve de concept:Problème envelopper ma tête autour de cette imbriquée question Départements

private void button1_Click(object sender, EventArgs e) 
{    
    DepartmentRepository repo = new DepartmentRepository(); 
    var entries = repo.FindAllDepartments(); //Returns IQueryable<Department> 

    treeView1.BeginUpdate(); 
    var parentDepartments = entries.Where(d => d.IDParentDepartment == null).ToList(); 
    foreach (var parent in parentDepartments) 
    { 
     TreeNode node = new TreeNode(parent.Name); 
     treeView1.Nodes.Add(node); 

     var children = entries.Where(x => x.IDParentDepartment == parent.ID).ToList(); 
     foreach (var child in children) 
     { 
      node.Nodes.Add(child.Name); 
     } 
    } 

    treeView1.EndUpdate(); 
} 

Elle place tous les départements de parents dans le contrôle TreeView et attribue correctement ce sont les enfants au bon parent.

Mon problème est, comment puis-je gérer les enfants des enfants? Départements imbriqués.

Je n'arrive pas à envelopper ma tête.

Merci pour toute indication.

+0

double possible [? Ce code peut être plus effecient] (http: // stackoverflow. com/questions/4069193/peut-ce-code-être-plus-effecient) –

+0

Pas vraiment; Là, je demandais à propos de l'efficacité de l'utilisation du code/linq. Ici, je demande comment j'accéderais aux départements imbriqués. –

+0

Et vous devriez voir le débat qui a commencé :) – Bronumski

Répondre

2

Vous devez utiliser la récursivité:

void LoadNode(TreeNode node, Department d) 
    { 
    foreach (var child in d.Children)   
    {    
      TreeNode childNode = node.Nodes.Add(child.Name); 
      LoadNode(childNode, child); // calls the method again for the next level 

    } 

    } 

Jetez un oeil ici pour échantillon de récursion: http://www.codeproject.com/KB/cs/recursionincsharp.aspx

Questions connexes