martes, septiembre 11, 2007

ASP.NET 2.0: Encontrar un control en el HeaderTemplate de un WizardControl

Bueno, AL FIN encontré algo de tiempo para desempolvar este blog y ver si ahora si (por enésima vez) me propongo actualizarlo frecuentemente.

Hoy descubrí la maravilla del Wizard Control del ASP.NET 2.0, y como con todas las cosas que tienen que ver en particular con ASP.NET y en general con MS, la alegría no tardo en dar paso a la frustación.

RESULTA que el WizardControl permite configurar un encabezado usando el tag HeaderTemplate, en donde se puede colocar lo que uno quiera, incluyendo casi cualquier tipo de control.

En mi caso, tenia un panel con un table adentro que queria mostrar bajo ciertas condiciones. Por lo tanto, intente obtener una referencia al panel usando el consabido FindControl:
Dim myPanel As Panel
myPanel = CType(Me.Wizard1.FindControl("pnlError"),pnlError)

Según la documentación de MS, esto debería funcionar sin problemas... la clave aqui esta en "DEBERIA". Resulta que NO funciona. Investigando en San Google, y luego de mucho buscar, me encontré con la maravilla de el método FindControl no recorre todos los objetos en su búsqueda por el objeto cuyo ID se le indicó.

La siguiente función (originalmente hecha en C# por JS Greenwood) soluciona este "problemita", buscando un control en TODOS los controles contenidos en el contenedor indicado:
Public Function MyFindControl(ByVal parent As Control, _
                              ByVal id As String) As Control
     If parent.ID = id Then
         Return parent
     End If
     Dim child As Control
     For Each child In parent.Controls
         Dim recurse As Control = MyFindControl(child, id)
         If Not recurse Is Nothing Then
             Return recurse
         End If
     Next
     Return Nothing
End Function

Entonces, ahora en lugar de usar el FindControl del WizardControl usamos la funcion MyFindControl:

Dim myPanel As Panel
myPanel = CType(MyFindControl(Me.Wizard1,"pnlError"),pnlError)


El link original del artículo de JS Greenwood lo pueden encontrar aqui:
http://www.asptoday.com/Content.aspx?id=2359


Victor Espina

No hay comentarios: