El código completo del ejemplo lo puedes encontrar aquí.
A la hora de crear controles de usuario solemos necesitar capturar un evento que se produce dentro del mismo, en la página padre. Además, normalmente, necesitaremos acceder a alguna de sus propiedades desde la página padre. En el ejemplo que os presento tenemos un control de usuario (un buscador) incrustado en una página que mostrará los resultados de la búsqueda.
Para ello el control de usuario posee un evento que se lanza una vez la búsqueda ha finalizado, además, los resultados de dicha búsqueda se almacenan en una propiedad del control de usuario que recupera la página para mostrarlos en un GridView.
Pasemos al código. El control de usuario, en su parte visual se compone únicamente de un TextBox (donde introducir el criterio de búsqueda) y un Button (que realiza la búsqueda).
La generación del evento se realiza desde el code-behind:
#region Eventos del control public event protected { if (this.AceptarClicked != null) { this.AceptarClicked(sender, new EventArgs()); } } #endregion |
Este código declara el evento (cuyo nombre será AceptarClicked) e implementa el método que invoca el evento.
#region Propiedades publicas private public List<string> Resultados { get { return resultados; } set { resultados = value; } } #endregion |
El código anterior declara una propiedad pública dentro del control donde se almacenarán los resultados de la búsqueda.
En el evento del botón del control de usuario realizamos la llamada al evento público que será capturado por la página:
protected { //Hardcode para simular una búsqueda this.resultados = new if (String.IsNullOrEmpty(this.txtPalabraClave.Text)) { this.resultados.Add("No se han encontrado resultados"); } else { this.resultados.Add("Resultado1 para " + this.txtPalabraClave.Text); this.resultados.Add("Resultado2 para " + this.txtPalabraClave.Text); this.resultados.Add("Resultado3 para " + this.txtPalabraClave.Text); this.resultados.Add("Resultado4 para " + this.txtPalabraClave.Text); } //Se invoca el evento público una vez la función del control ha terminado OnClick(sender); } |
La página debe capturar el evento, esto se hace de igual forma que se captura el evento de un botón o cualquier control de .NET. Así, en la presentación de la página tendremos:
<uc1:Buscador ID="Buscador1" |
Así el método de tratar el evento del control de usuario, dentro de la página padre será Buscador1_AceptarClicked y se codificará así:
protected { if (this.Buscador1.Resultados != null) { this.GridView1.DataSource = this.Buscador1.Resultados; this.GridView1.DataBind(); } } |
El código completo del ejemplo lo puedes encontrar aquí.
Y esto es todo, espero que te sirva
Muy útil! Muchas gracias!
ReplyDeleteBueno gracias, podrias ponerlo en BV
ReplyDeleteExcelente aporte. Estaba buscando esta información.
ReplyDeleteExcelente!!! me ayudo muchisimo!!!
ReplyDeleteGracias.
Juan Manuel Romero. Cordoba, Argentina.
Muy buen ejemplo secillo, practico y puntual
ReplyDeleteQue buen tutorial, gracias por compartir tu conocimiento.
ReplyDelete¿hay necesidad de crear la propiedad?
ReplyDelete