2017-09-05 6 views
0

Ich habe eine DataGridView, die alle Gruppenmitglieder unseres ActiveDirectory anzeigt. Wenn ich auf eine Gruppe doppelklicke, möchte ich alle Mitglieder und Untermitglieder dieser Gruppe (einschließlich Benutzer) in einem TreeView anzeigen. Ich habe mehrere Versuche unternommen, dies zu tun, aber mein Problem ist, dass die Prozedur ausgeführt werden muss, bis alle Mitglieder und Untermitglieder der treeView hinzugefügt wurden, was ich nicht tun kann. Gibt es eine Art von Muster, die ich dafür verwenden muss? Ausgehend davon, wie sollte mein Code aussehen?Baumstruktur rekursiv bevölkern

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

Antwort

1

Active Directory abfragen ein wenig Zeit in Anspruch nehmen kann, vor allem in größeren Umgebungen mit vielen Objekten oder wenn Sie eine langsamere Verbindung zu einem Domänencontroller .

Daher empfahl ich Sie nur auflisten und füllen Sie die oberste Ebene Knoten in der TreeView und dann beim Erweitern einer OU oder Container Sie die Kinder aufzählen.

Dies macht Ihre Anwendung reaktionsschnell und schnell, da der Benutzer normalerweise nur einige Knoten und nicht alle erweitern wird.