martes, 19 de agosto de 2008

Controles de usuario: gestionar eventos.

Cuando descubrí los controles de usuario, se me abrieron a la vista un gra número de posibilidades. Lo primero que se me ocurrió fue crear cuadros de texto con validadores, por ejemplo un cuadro de texto con los validadores "requerido", "mayor que cero", etc. Algo como esto:


<?xml:namespace prefix = asp /><asp:textbox id="TextBox1" width="60px" runat="server"></asp:textbox><asp:requiredfieldvalidator id="RFV" runat="server" controltovalidate="TextBox1" errormessage="Dato Requerido" display="Dynamic">Dato Requerido</asp:requiredfieldvalidator><asp:rangevalidator id="RangeValidator1" runat="server" controltovalidate="TextBox1" errormessage="Número no v lido" display="Dynamic" maximumvalue="100000" minimumvalue="1" type="Integer"></asp:rangevalidator>

El problema me surgió cuando quería que, en la página que contiene el control quería realizar alguna acción cuando cambiara el valor del control de usuario, es decir, capturar desde la página principal los eventos que se producen en los controles de usuario.Tras buscar y buscar en Google, la solución que encontré es la siguiente:

defino un controlador de evento en el archivo de código del control (textboxNumerico.ascx.cs):

public event CommandEventHandler cambiado;

y a continuación, en el controlador del evento "TextChanged" del "TextBox1" del control de usuario, creo un CommandEventArgs, que será el parámetro que devolverá el evento del control a la página contenedora y lanzo el evento "cambiado", que acabo de definir.


protected void TextBox1_TextChanged(object sender, EventArgs e)
{
  if (cambiado != null)
  {
    CommandEventArgs ce = new CommandEventArgs(TextBox1.Text.ToString(), null);
    cambiado(this, ce);
  }
}

Una vez hecho esto, lo único que tengo que hacer es, en la página que contiene el control de usuario, gestionar el evento "Oncambio".


<?xml:namespace prefix = uc1 /><uc1:textboxnumerico id="tCantidad" runat="server" oncambiado="cantidadcambio" text="'<%# Bind("cantidad")%>'"></uc1:textboxnumerico>

protected void cantidadcambio(object sender, EventArgs e)
{
  .....
}

Y eso es todo, espero que os sea de utilidad.


1 comentario:

Anónimo dijo...

Viejito muchas gracias, llevaba mucho timepo buscando este bendito codigo, muchisisisismas gracias.