Compartiendo datos entre WebForms y UserControl ASP.NET

En el trabajo me encontré con la necesidad de tener que llenar un gridView que estaba en un formulario a partir de un userControl que se muestra a partir de un ModalPopup Extender de AJAX. Después de buscar mucho en internet me encontré con este artículo http://ltuttini.blogspot.com/2009/10/c-pasar-informacion-entre-user-control.html, en el cual se muestra muy claramente cómo hacer para enviar datos entre dos userControl a partir de eventos y delegados. Aunque el articulo es muy bueno y se explica claramente los conceptos, el código esta hecho en C# y aunque pasar de C# a Visual Basic en la mayoría de los casos es fácil, en el tema de eventos y delegados si cambia un poco. Es por esto que en este artículo quiero mostrar las líneas claves de código VisualBasic que se tienen que hacer para lograr la comunicación entre los userControl, o entre el userControl y el Formulario WEB.

Para comenzar en el UC en el que se captura la información, agregamos un evento y un delegado de la siguiente manera

Como vemos he creado un delegado denominado AgregarRegistroHandler el cual recibe como parámetro un objeto del tipo AgregarRegistroEventArgs, que es una clase que he declarado para encapsular la información que quiero enviar del UC al formulario.

El tema de delegados y eventos se sale del alcance de este artículo, pero como para dar una idea, los delegados es la solución que da .net para el manejo de punteros, es decir, por medio de delegados puedo hacer la invocación de un método que se encuentre en otro formulario.

La declaración de la clase AgregarRegistroEventArgs la hago de la siguiente manera

Como vemos podemos hacer la clase que queramos deponiendo de lo que necesitemos enviar

Por último en el UC en el que se toman los datos hacemos la invocación del evento, por medio de la sentencia RaiseEvent que lo que hace es lanzar un evento, si queremos ver la equivalencia entre las sentencias C# y VB.NET recomiendo este articulo http://www.elguille.info/net/dotnet/equivalenciavbcs4.htm

Como se ve en el segmento de código lo que hago es en un métodos x, lanzar el método AgregarRegistro, enviando como parámetro un objeto de la clase AgregarRegistroEventArgs.

Ahora como manejamos ese evento? Para eso dentro del formulario que contiene el UC, agregamos un manejador para este evento.

Lo que esta línea significa es que estamos agregando un manejador de evento para el método AgregarRegistro de la instancia del UC q captura los datos, que para mi caso se llama Documento1, y lo estamos re direccionando al método asignar del Formulario. (Esto es lo que significa la sentencia AddresOf)

A continuación vemos la declaración del método asignar.

Como se ve, este método recibe como parámetro un objeto de la clase AgregarRegistroEventArgs que fue definida en el UC inicial (que en mi caso se llama user_control_uc_frm_documentos). Y Con este objeto ya tengo la información que capture en el UC.

Resumiendo, en el UC donde se capturen los datos, generamos un event y un delegate, después generamos la clase en la que queramos encapsular la información que queremos enviar y por ultimo lanzamos el método con un RaiseEvent. Para capturarlo se crea un manejador en el Formulario contenedor con un AddHandler y listo tenemos comunicado el UC con el Formulario.

2 comentarios en “Compartiendo datos entre WebForms y UserControl ASP.NET

  1. Interesante artículo. Lo malo es que le falta un ejemplo para descargar y probar. Algunas líneas de código son francamente difíciles de leer.
    Gracias

Replica a José Mª Fueyo Cancelar la respuesta