組織単位リスト画面の Windows アプリの C# のコードです。
  
 private readonly IList<OrganizationalUnit> ouCol;   //OUのコレクション
  
 public OUList()
 {
   InitializeComponent();
   var ous = DirectoryAccess.GetOrganizationalUnits()   //OUを取得
   ouCol = ous.OrderBy(ou => ou.DisplayPath).ThenBy(ou => ou.Name).ToList();
   this.OUBtindingSource.DataSource = ouCol;
   this.CountLabel.Text = String.Format("{0} 個のオブジェクト", this.OUBindingSource.Count);
   this.AddChildNode(null)  //子ノードを追加
   this.OUTreeView.ExpandAll();
 }
  
 //OUTreeView.AfterSelect イベント
 private void OUTreeView_AfterSelect(object sender, TreeViewEventArgs e)
 {
   var selectedOU = ouCol.Single(ou => ou.Entry.Path.Equals(e.Node.Tag.ToString()));
   this.OUBindingSource.Position = this.OUBindingSource.IndexOf(selectedOU);
   this.ShowStoredData(selectedOU);  //格納されているデータを表示
 }
  
 //子ノードを追加
 private void AddChildNode(TreeNode node)
 {
   var path = (node == null) ? String.Empty : node.FullPath;
   var childOUs = ouCol.Where(ou => ou.DisplayPath.Equals(path)).ToList();   //直下のOU
   foreach (var ou in childOUs)
   {
     var childNode = CreateNode(ou);   //ノードを作成
     if (node == null)
     {
       this.OUTreeView.Nodes.Add(childNode);
     }
     else
     {
       node.Nodes.Add(childNode);
     }
     this.AddChildNode(childNode);   //子ノードを追加
   }
 }
  
 //指定した OU のノードを作成
 private TreeNode CreateNode(OrganizationalUnit ou)
 {
   var path = (ou.DisplayPath.Length == 0) ? String.Empty : ou.DisplayPath + "/";
   return new TreeNode(ou.Name) { Name = path + ou.Name, Tag = ou.Entry.Path };
 }
  
 //指定した OU に格納されているデータを表示
 private void ShowStoredData(OrganizationalUnit ou)
 {
   string[] subItem = new string[3];   //名前と所属パスの配列
   this.DataListView.Items.Clear();
   foreach (var domainObject in ou.StoredDomainObjects)  //直下のオブジェクト数分
   {
     var objectType = (CategoryType)Enum.Parse(typeof(CategoryType), domainObject.Entry.SchemaClassName, true);
     subItem[0] = domainObject.Name;   //名前をセット
     subItem[1] = DirectoryAccess.CategoryNames[(int)objectType];    //種類をセット
     subItem[2] = domainObject.Description;  //説明をセット
     this.DataListView.Items.Add(new ListViewItem(subItem, (int)objectType));
   }
   this.DataCountLabel.Text = String.Format("{0} 個のオブジェクト", ou.StoredDomainObjects.Count);
 }
  
 説明は VB のコードの方に書いてます。
 あと ShowStoredData メソッド内で、種類をセットするために使ってる DirectoryAccess.CategoryNames プロパティのコードです。
  
 //ディレクトリ オブジェクトの種類の名前リストを取得
 public static ReadOnlyCollection<string> CategoryNames
 {
   get
   {
     if (_categoryNames == null)
     {
       _categoryNames = new ReadOnlyCollection<string>(
         new string[] { "ユーザ", "グループ", "コンピュータ", "組織単位", "プリンタ", "共有フォルダ" });
     }
     return _categoryNames;
   }
 }