Friday, September 14, 2007

Recursive Page.FindControl for VB.Net with Generics

This makes life much easier when you're trying to get to controls that are themselves contained within other containers, eg, a TextBox inside a DataView or DataList.

Public Function FindControlRecursive(Of ItemType)(ByVal Ctrl As Object, ByVal id As String) As ItemType
    
If String.Compare(Ctrl.ID, id, StringComparison.OrdinalIgnoreCase) = 0 AndAlso TypeOf Ctrl Is ItemType Then
          Return
CType(Ctrl, ItemType)
     End If
 
     For Each c As Control In Ctrl.Controls
         
Dim t As ItemType = FindControlRecursive(Of ItemType)(c, id)

         
If t IsNot Nothing Then
               Return
t
         
End If
     Next
 
     Return Nothing
End
Function

This example also demonstrates the use of Generics, which before .Net 2.0 was only available with cast typing and use of base objects, etc. There are several good articles online about generics, but here are a couple to get you started.

0 comments: