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:
Publicar un comentario