麻烦缠绕这个嵌套的Departments问题

时间:2010-11-01 14:02:45

标签: c# winforms linq entity-framework

在调整了我的代码之后,我得到了这个概念代码的小证据:

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

它将每个父部门放在TreeView控件中,然后正确地将它的子部分配给正确的父部分。

我的问题是,我该如何处理孩子的孩子?嵌套部门。

我似乎无法绕过它。

感谢任何指导。

1 个答案:

答案 0 :(得分:2)

您需要使用递归:

  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

     }

  }

看看这里的递归样本: http://www.codeproject.com/KB/cs/recursionincsharp.aspx