SiteMapProvider.GetChildNodes Method (SiteMapNode)


When overridden in a derived class, retrieves the child nodes of a specific SiteMapNode.

Namespace:   System.Web
Assembly:  System.Web (in System.Web.dll)

Public MustOverride Function GetChildNodes (
	node As SiteMapNode
) As SiteMapNodeCollection


Type: System.Web.SiteMapNode

The SiteMapNode for which to retrieve all child nodes.

Return Value

Type: System.Web.SiteMapNodeCollection

A read-only SiteMapNodeCollection that contains the immediate child nodes of the specified SiteMapNode; otherwise, null or an empty collection, if no child nodes exist.

Classes that derive from the SiteMapProvider class must implement the abstract GetChildNodes method.

Notes to Inheritors:

When overriding the GetChildNodes method in a derived class, be sure to perform security trimming on the child nodes and ensure that the returned collection is read-only. The collection contains only the immediate children of the specified node.

The following code example demonstrates how to implement the GetChildNodes method in a class that implements the abstract SiteMapProvider class. The SimpleTextSiteMapProvider stores the hierarchical parent/child relationships in one Hashtable object and all SiteMapNode objects in another. The GetChildNodes method performs a reverse-lookup using both ArrayList objects.

This code example is part of a larger example provided for the SiteMapProvider class.

' Implement the GetChildNodes method.
Public Overrides Function GetChildNodes(ByVal node As SiteMapNode) As SiteMapNodeCollection
  Dim children As New SiteMapNodeCollection()
  ' Iterate through the ArrayList and find all nodes that have the specified node as a parent.
  SyncLock Me
    Dim i As Integer
    For i = 0 To childParentRelationship.Count - 1

      Dim de As DictionaryEntry = CType(childParentRelationship(i), DictionaryEntry)
      Dim nodeUrl As String = CType(de.Key, String)

      Dim parent As SiteMapNode = GetNode(childParentRelationship, nodeUrl)

      If Not (parent Is Nothing) AndAlso node.Url = parent.Url Then
        ' The SiteMapNode with the Url that corresponds to nodeUrl
        ' is a child of the specified node. Get the SiteMapNode for
        ' the nodeUrl.
        Dim child As SiteMapNode = FindSiteMapNode(nodeUrl)
        If Not (child Is Nothing) Then
          children.Add(CType(child, SiteMapNode))
          Throw New Exception("ArrayLists not in sync.")
        End If
      End If
    Next i
  End SyncLock
  Return children
End Function 'GetChildNodes

Protected Overrides Function GetRootNodeCore() As SiteMapNode
  Return RootNode
End Function ' GetRootNodeCore()

' Implement the GetParentNode method.
Public Overrides Function GetParentNode(ByVal node As SiteMapNode) As SiteMapNode
  ' Check the childParentRelationship table and find the parent of the current node.
  ' If there is no parent, the current node is the RootNode.
  Dim parent As SiteMapNode = Nothing
  SyncLock Me
    ' Get the Value of the node in childParentRelationship
    parent = GetNode(childParentRelationship, node.Url)
  End SyncLock
  Return parent
End Function 'GetParentNode

.NET Framework
Available since 2.0
Return to top