Freigeben über


IHierarchicalEnumerable.GetHierarchyData(Object) Methode

Definition

Gibt ein hierarchisches Datenelement für das angegebene aufgelistete Element zurück.

public:
 System::Web::UI::IHierarchyData ^ GetHierarchyData(System::Object ^ enumeratedItem);
public System.Web.UI.IHierarchyData GetHierarchyData (object enumeratedItem);
abstract member GetHierarchyData : obj -> System.Web.UI.IHierarchyData
Public Function GetHierarchyData (enumeratedItem As Object) As IHierarchyData

Parameter

enumeratedItem
Object

Das Object, für das IHierarchyData zurückgegeben werden soll.

Gibt zurück

IHierarchyData

Eine IHierarchyData-Instanz, die das an die Object-Methode übergebene GetHierarchyData(Object) darstellt.

Beispiele

Im folgenden Codebeispiel wird veranschaulicht, wie ein hierarchisches datengebundenes Steuerelement ASP.NET ein Objekt in einer rekursiven Datenbindungsmethode verwendetIHierarchyData. Die Elemente in einem IHierarchicalEnumerable Objekt werden aufgezählt, und für jedes IHierarchyData Objekt wird mithilfe der GetHierarchyData Methode abgerufen. Schließlich wird die HasChildren Eigenschaft überprüft, um festzustellen, ob rekursion erforderlich ist. Dieses Codebeispiel ist Teil eines größeren Beispiels, das für die HierarchicalDataBoundControl Klasse bereitgestellt wird.

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;
        }
    }
}
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

Hinweise

In der Regel rufen Clients, die Sammlungen verwenden IHierarchicalEnumerable , ein IEnumerator Objekt durch Aufrufen der GetEnumerator Methode ab, und rufen Sie dann die Aufzählung auf, und rufen Sie die GetHierarchyData Methode für jedes aufgezählte Element auf, um ein IHierarchyData Objekt abzurufen.

Gilt für

Siehe auch