Data binding en Windows Forms

Las interfaces de usuario basadas en formularios han permitido pasar de aplicaciones en modo consola a sistemas más interactivos. Esto representa un gran avance de cara a los usuarios, pero desde el punto de vista del desarrollo se puede complicar un poco el código.

En este artículo se verá cómo el acceso a datos o DataBinding proporciona varias ventajas en el desarrollo de las aplicaciones y aumenta la calidad del código. Para el código se usará C# y como herramienta de desarrollo, la versión profesional de Visual Studio 2010, aunque se puede emplear la edición express, completamente gratuita, sin ningún tipo de problemas.

Configuración inicial

Para este ejemplo se creará un nuevo proyecto C#, y se agregarán un par de controles al formulario por defecto, un par de campos de texto TextBox y un botón Button para ejecutar las acciones. El aspecto final del formulario tendrá este aspecto:

Además del formulario, se creará una clase Persona que contendrá dos campos, Nombre y Apellidos, así como un método denominado Guardar. El código es el siguiente:

    public class Persona
    {
        public string Nombre { get; set; }
        public string Apellidos { get; set; }

        public void Guardar() { }
    }

Sin DataBinding

El siguiente paso es mostrar datos en el formulario, para ello se edita el código del constructor para que muestre algunos datos, y luego se edita la acción del botón para que, a partir de los datos del formulario genere una nueva persona y lo guarde:

        public Form1()
        {
            InitializeComponent();
            Persona p1 = new Persona() { Nombre = "Roberto", Apellidos = "Luis" };
            textBox1.Text = p1.Nombre;
            textBox2.Text = p1.Apellidos;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Persona p2 = new Persona();
            p2.Nombre = textBox1.Text;
            p2.Apellidos = textBox2.Text;
            p2.Guardar();
        }

Este código está claro, el problema es que se han perdido 4 líneas en asignar valores desde y hasta dos campos de texto, en un formulario con 10 campos la cosa se puede complicar, y no es por el número de líneas de código, sino porque esta duplicidad puede generar errores al modificar el mismo.

Con DataBinding

La diferencia fundamental del enlace a datos es que se pueden enlazar los campos del formulario de manera directa a las propiedades de una clase, de tal manera que las asignaciones se siguen realizando, pero dentro del código generado por Visual Studio y son bidireccionales, es decir, que cualquier cambio en el formulario afecta directamente a las propiedades de la clase.

Para enlazar el formulario a la clase es necesario, con el formulario en modo diseño, seleccionar el primer campo a enlazar (en nuestro caso textBox1), desplazarse a la ventana propiedades, situada en la esquina inferior derecha, o con la secuencia Alt + Enter.

En esta ventana, se selecciona la opción DataBindings, y dentro de esa opción, el campo Text, no se sorprenda al no encontrar nada, ya que deberemos agregar el origen de datos al proyecto, pulsando en el botón Add Project Data Source…, el cual mostrará el asistente para la selección del origen de datos.

En este asistente se selecciona Object como el origen de datos del control:

Dentro de este origen se selecciona la clase Persona (Nota, si no aparece la clase es que no ha recompilado el proyecto, tras compilarlo y volver a ejecutar el asistente se mostrará la clase).

Al finalizar el asistente, al volver a ir al menú, el contenido no estará vacío, sino que se podrá acceder a los campos de la clase sin problemas, y asignarlos al valor Text del control. Al asginarlo por primera vez se mostrará un nuevo control en el diseñador, llamado personaBindingSource, que es el objeto que realiza la magia del enlace de datos. De esta manera se puede asignar los valores a los 2 campos de texto sin problemas.

Finalmente queda editar el código para sustituir las asignaciones por una única asignación al objeto personaBindingSource, y obtener la información del mismo:

        public Form1()
        {
            InitializeComponent();
            personaBindingSource.DataSource = new Persona() { Nombre = "Roberto", Apellidos = "Luis" };
        }

        private void button1_Click(object sender, EventArgs e)
        {
           (personaBindingSource.DataSource as Persona).Guardar();
        }

Hemos eliminado 4 líneas del código, y la validación se efectúa directamente en la clase. Esto permite que se puedan usar patrones como MVC en aplicaciones Windows Forms.

Conclusiones:

Windows Forms, aunque ha pasado a segundo plano con el auge de WPF, silverlight y las interfaces metro, se sigue empleando para soporte de aplicaciones existentes y como manera de creación de nuevas soluciones. Este método permite tener una codificación más limpia, liberar el código del formulario, y que la clase tenga la responsabilidad de validar datos y de mantener su integridad. Es verdad que esto implica cierto acoplamiento, pero la ventaja es que cualquier clase que herede de Persona podrá ser enlazada sin más que cambiar dos líneas de código.

Más información:

  • Descarga el ejemplo terminado aquí

Un pensamiento en “Data binding en Windows Forms

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s