IHierarchicalEnumerable.GetHierarchyData メソッド
アセンブリ: System.Web (system.web.dll 内)

Dim instance As IHierarchicalEnumerable Dim enumeratedItem As Object Dim returnValue As IHierarchyData returnValue = instance.GetHierarchyData(enumeratedItem)
戻り値
GetHierarchyData メソッドに渡される Object を表す IHierarchyData インスタンス。

通常、IHierarchicalEnumerable コレクションを使用するクライアントは、まず GetEnumerator メソッドを呼び出して IEnumerator オブジェクトを取得します。次に、列挙を反復処理し、列挙されたそれぞれの項目で GetHierarchyData メソッドを呼び出して IHierarchyData オブジェクトを取得します。

次のコード例では、階層構造の ASP.NET データ バインド コントロールが、再帰的なデータ バインディング メソッドで IHierarchyData オブジェクトを使用する方法を示します。IHierarchicalEnumerable オブジェクト内の項目が列挙され、それぞれの項目に対して、GetHierarchyData メソッドを使用して IHierarchyData オブジェクトが取得されます。最後に HasChildren プロパティがチェックされ、再帰が必要かどうかが決定されます。このコード例は、HierarchicalDataBoundControl クラスのトピックで取り上げているコード例の一部分です。
Private Sub RecurseDataBindInternal(ByVal node As TreeNode, _ ByVal enumerable As IHierarchicalEnumerable, _ ByVal depth As Integer) Dim item As Object For Each item In enumerable Dim data As IHierarchyData = enumerable.GetHierarchyData(item) If Not data Is Nothing Then ' Create an object that represents the bound data ' to the control. Dim newNode As New TreeNode() Dim rvnode As New RootViewNode() rvnode.Node = newNode rvnode.Depth = depth ' The dataItem is not just a string, but potentially ' an XML node or some other container. ' If DataTextField is set, use it to determine which ' field to render. Otherwise, use the first field. If DataTextField.Length > 0 Then newNode.Text = DataBinder.GetPropertyValue _ (data, DataTextField, Nothing) Else Dim props As PropertyDescriptorCollection = _ TypeDescriptor.GetProperties(data) ' Set the "default" value of the node. newNode.Text = String.Empty ' Set the true data-bound value of the TextBox, ' if possible. If props.Count >= 1 Then If Not props(0).GetValue(data) Is Nothing Then newNode.Text = props(0).GetValue(data).ToString() End If End If End If Nodes.Add(rvnode) If data.HasChildren Then Dim newEnumerable As IHierarchicalEnumerable = _ data.GetChildren() If Not (newEnumerable Is Nothing) Then RecurseDataBindInternal(newNode, _ newEnumerable, depth + 1) End If End If If MaxDepth < depth Then MaxDepth = depth End If End If Next item End Sub 'RecurseDataBindInternal
private void RecurseDataBindInternal(TreeNode node, IHierarchicalEnumerable enumerable, int depth) { foreach(object item in enumerable) { IHierarchyData data = enumerable.GetHierarchyData(item); if (null != data) { // Create an object that represents the bound data // to the control. TreeNode newNode = new TreeNode(); RootViewNode rvnode = new RootViewNode(); rvnode.Node = newNode; rvnode.Depth = depth; // The dataItem is not just a string, but potentially // an XML node or some other container. // If DataTextField is set, use it to determine which // field to render. Otherwise, use the first field. if (DataTextField.Length > 0) { newNode.Text = DataBinder.GetPropertyValue (data, DataTextField, null); } else { PropertyDescriptorCollection props = TypeDescriptor.GetProperties(data); // Set the "default" value of the node. newNode.Text = String.Empty; // Set the true data-bound value of the TextBox, // if possible. if (props.Count >= 1) { if (null != props[0].GetValue(data)) { newNode.Text = props[0].GetValue(data).ToString(); } } } Nodes.Add(rvnode); if (data.HasChildren) { IHierarchicalEnumerable newEnumerable = data.GetChildren(); if (newEnumerable != null) { RecurseDataBindInternal(newNode, newEnumerable, depth+1 ); } } if ( _maxDepth < depth) _maxDepth = depth; } } }

Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


- IHierarchicalEnumerable.GetHierarchyData メソッドのページへのリンク