sábado, 11 de julio de 2009

Poder utilizar un evento del control de usuario desde la página que lo contine

Vamos a centrar este rollo que suelto aqui. Estamos trabajando con ASP.NET hemos descubierto como crear controles de usuario, y sí, son muy monos, pero queremos darle un poco más de potencia y versatilidad, queremos guiar su comportamiento desde la página que lo utiliza.

Para dotar realmente de potencia a los controles de usuario, solo falta poder gestionar los eventos de alguno de sus controles desde la página que lo contiene.
Tenemos que hacer dos cosas. Por un lado generar un evento público para poder gestionarlo posteriormente y por otro la gestión de este evento desde la página de contenido

Paso 1 ¿qué hay que hacer en el control de usuario?
Imaginemos que tenemos un gridview que queremos procesar el evento SelectedIndexChanged
primero creamos el evento público que despues lanzaremos
public event Seleccionado as CommandEventHandeler
despues en el evento SelectedIndexCahnged del control gridview lazamos el nuevo evento pasando el valor seleccionado
dim mi_e as CommandEventArgs = New CommandEventArgs(gridview1.selectedvalue, system.dbNull)
RaiseEvent Seleccionado(me,mi_e)


Paso 2 gestionar el evento desde la página que lo contiene
Tenemos que indicar que queremos gestionar el nuevo evento y con que procedimiento
En la vista de código de la página aspx añadimos en la definicion del control de usuario indicando que vamos a gestionar el evento Seleccionado con el procedimiento CambioSeleccion

Solo falta definir en el fichero de código asociado a la página donde hemos puesto el control de usuario, el procedimiento de evento
protected sub CambioSeleccion(ByVal sender as object, Byval e as
System.Web.Ui.Controls.CommandEventArgs)
....
End Sub


Con esto cuando se dispara el evento en el control de usuario se dispara otro evento para ser manipulado en la página contenedora, pudiendo programar en cada caso lo que necesitemos