递归填充treeview

时间:2017-09-05 21:22:36

标签: c# datagridview active-directory treeview

我有一个DataGridView,它显示我们的ActiveDirectory的所有组成员。双击组时,我想在treeView中显示该组的所有成员和子成员(包括用户)。我做了几次尝试,但我的问题是程序需要运行,直到所有成员和子成员都添加到treeView,我无法做到。 我需要使用某种模式吗? 从这开始,我的代码应该如何?

PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
GroupPrincipal gp = GroupPrincipal.FindByIdentity(ctx, name);

var nodes = new List<TreeNode>();
foreach (Principal p in gp.GetMembers())
{
     nodes.Add(new TreeNode(p.Name));
}
treeView.Nodes.AddRange(nodes.ToArray());

2 个答案:

答案 0 :(得分:1)

也许使用IEnumerable来选择所有父对象和子对象。

使用此主题:Making ASP.NET application always running 或者关于节点的这个主题:How to get all children of a parent control?

答案 1 :(得分:1)

查询Active Directory可能需要一些时间,尤其是在具有大量对象的较大环境中或者与域控制器的连接速度较慢时。

因此,我建议您只枚举并填充TreeView中的顶级节点,然后展开您枚举孩子的OU或容器。

这使您的应用程序响应迅速,因为通常用户只会扩展几个节点,而不是所有节点。