2017-09-05 146 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或容器來枚舉子節點。

這使得您的應用程序響應和快速,因爲通常用戶將只擴展一些節點,而不是所有節點。