2017-09-05 142 views
0

我有一个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()); 

回答

1

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

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

这使得您的应用程序响应和快速,因为通常用户将只扩展一些节点,而不是所有节点。