User Controls enlazados a datos. (Data binding to a user control)

Muchas veces, con el objetivo de mejorar la modularidad (y por tanto la abstracción, reutilización, etc.) de nuestro código, nos vemos en noble tarea de encapsular un grupo de Controles en un User Control. Cosa fácil si uno sabe arrastrar, colocar, copiar y pegar. :P

Sin embargo, cuando la cosa va de enlazar propiedades de este a datos, nos vemos en cierta dificultad que nos proponemos a resolver.

Aparentemente, nos han enseñado que si queremos que una propiedad sea enlazable a datos, debemos marcar esta con los siguientes atributos: bindable y browsable

[Bindable(true)]
[Browsable(true)]
public string Propiedad
{
    get { return propiedadTextBox.Text; }
    set { propiedadTextBox.Text = value; }
}

Así, en el apartado (DataBindings) de la ventada de propiedades aparecera nuestra propiedad y nos permitirá enlazarla a un bindingSource que tengamos en la clase sobre la que estemos trabajando.

Por tanto, en lo que se refiere a “tiempo de diseño” ya hemos acabado y se puede utilizar en el diseñador.

Sin embargo, para que funcione el enlace a datos, tendremos que añadir unas lineas extra de código: añadimos un evento de la siguiente forma: PropiedadChanged y buscar un momento.

public event System.EventHandler PropiedadChanged;

*Puede ser EventHandler o que herede cualquier otro delegado… pero lo hemos puesto así por ser lo más genéricos posibles.

Además de crear el evento, debemos lanzarlo! Si no lanzamos el evento en ningún momento, los cambios no serán reflejados en el Binding Source.

Sabiendo esto, ya podremos encapsular y agrupar controles y tener ser más productivos.

Happy coding!

12 Responses to “User Controls enlazados a datos. (Data binding to a user control)”


  1. 1 Mario 17 October 2007 at 21:35

    Hola, estoy muy interesado en este artículo y me gustaría saber si podrías enviarme o publicar un ejemplo completo puesto que no se muy bien cuando hay que lanzar el evento que se crea para cada propiedad. Mi intención es crear un componente personalizado que herede del textbox y que su propiedad miText equivalente a Text sea “bindable”. Yo programo en vb pero supongo que si lo subes en C# (porque eso es C# no??) seré capaz de “traducirlo” a vb.
    Muchas gracias de antemano

  2. 2 Rafa Vargas 18 October 2007 at 10:52

    Claro, como no. Mira en tu email.

  3. 3 Mario 18 October 2007 at 16:21

    Hola, muchas gracias por responder tan rápido. Gracias a tu ayuda he podido hacer lo que estaba intentado desde hacia un buen tiempo. Un saludo…

  4. 4 Jesús 19 November 2007 at 13:50

    Hola, no sé si la solución que propones me servirá. Te explico mi dolor de cabeza: Tengo un textbox personalizado enlazado en su propiedad Text a un dataset, hasta aquí todo normal. El caso es que cuando pretendo ejecutar un suspendbinding o un resumebinding del bindingmanagerbase del formulario la ejecución se detiene y el visor de excepciones me advierte lo siguiente: “DataBinding no puede encontrar en la lista la fila adecuada para todos los enlaces”. Lo más aproximado que me haya dado algo de luz al respecto dice que el problema es del control textbox personalizado y lo que busco es algo de código que me de luz al respecto. Tal vez el código que has enviado a mi predecesor en la lista me aclare algo. Gracias por todo.

  5. 5 Jesús 19 November 2007 at 18:02

    Olé

    Gracias mil.
    Jesús

    Tal vez puedas indicarme algún libro donde se expliquen todas estas “curiosidades” o, más en serio, donde se estudie qué significan, cómo se aplican y complementan las diferentes interfaces que se necesitan para crear complementos, controles etc. con solidez . ¿Quién, que no sea un figura como tú, iba a saber que hay que activar el evento para que el binding no se queje?. Porque quejar ya no se queja pero yo no sé por qué.

    Renuevo mi gratitud.

    Mil gracias
    Jesús

  6. 6 Rafael Vargas 19 November 2007 at 18:18

    Esto lo he aprendido “decompilando” el Framework. Utilizando el visor de interfaces que integra el Visual Studio así como el navegador que trae para ver todos los métodos, clases, etc… en otras palabras: un poco de ingeniería inversa.

    Vamos, un trabajo de chinos y de dedicarle mucho tiempo.

    ¿Libros? No conozco ninguno, pero posiblemente habrá alguno… sería lo lógico.

    Un saludo.

  7. 7 eterX 3 December 2007 at 20:55

    Hola, me podrías facilitar el ejemplo del que hablan, gracias! me gustaría aprender más sobre vs ya que no tengo mucho desarrollando con el, toda buena práctica creo me servirá bastante, y si pudieras aconsejarme algunos tips para mejorar rápido te lo agradecería mucho, bueno, gracias de nuevo por tu atención, hasta pronto!

  8. 8 Nacho 13 February 2008 at 08:58

    Hola estoy interesado en el desarrollo del control que has realizado ya que estoy intentando realizar un control simple, el cual contenga una imagenbutton y un textbox, en el que estos dos componetes puedan ser enlazados a un origen de datos, si se desea.
    Ya que trabajo en C# en Visual Studio

    Gracias por tu tiempo

  9. 9 Gustavo Real 19 February 2008 at 12:16

    Buenos dias:

    Tengo la necesidad de crear barra de navegacion entre registros que esten en clases separadas para recorrer dataset, pero a la hora de usar el bindingcontext y crear un objeto bindingmanagerbase la clase no ve el contexto del formulario.
    Tendrias un ejemplo de como hacer esto y perdon por el atrevimiento pero podrias mandarmelo a mi correo.

    Estoy aprendiendo y vengo de Visual Fox y estoy muy interesado en desarrolar en C#

    Muchas gracias
    Gustavo Real

  10. 10 Rafa Vargas 19 February 2008 at 18:11

    Esto no es un foro, por favor, dejen de pedir cosas.

  11. 11 Victor Kresisch 28 March 2008 at 12:25

    Hola Rafa

    Me puedes enviar el ejemplo en C#?

    Desde ya, muchas gracias y mis saludos

    Victor


  1. 1 Componentes enlazados a datos (DataBound Component) « Vargas & Software Development Trackback on 19 September 2007 at 17:03
Comments are currently closed.



About me


My name is Rafa Vargas. I'm an undergraduate student of Computer Science at University of Seville, Spain. I am mainly interested in computer security, usability and the business of software.

Click here to read the full story.

Twitter subscription

Enter your email address to subscribe to this blog and receive notifications of new posts by email.

Join 1,022 other followers

Archives


Follow

Get every new post delivered to your Inbox.

Join 1,022 other followers