sábado, 9 de julio de 2016

Receta C# No. 7-2: Almacenar Datos dentro de un Control

Índice

1. Introducción
2. Palabras Clave
3. Problema
4. Solución
5. Discusión de la Solución
5.1 Propiedad Control.Tag
5.2 WinForms
5.2.1 Clase ListView
5.2.2 Clase ListViewItem
5.3 Telerik
5.3.1 Clase RadListView
5.3.2 Clase RadListDataView
5.4 DevExpress
6. Práctica: Almacenamiento de Datos en un Control
7. Conclusiones
8. Literatura & Enlaces

1. Introducción

Asociar datos a un control es una tarea común en la construcción de una interfaz gráfica de usuario. Con esta receta C# el programador explora los conceptos básicos de la función Tag. Esta propiedad, como se explica en más detalle en la sección práctica, consiste en un mecanismo simple y directo para asociar datos a un control. La sección práctica comprende tres implementaciones distintas: WinForms estándar (.NET), elementos de Telerik y DevExpress.

2. Palabras Clave

  • .NET
  • Control
  • Dato
  • DevExpress
  • Información
  • Telerik

3. Problema

Implementar un mecanismo de almacenamiento de datos en un control.

4. Solución

En la jerarquía de herencia de controles visuales se cuenta con la propiedad Tag para asociar datos a un elemento de este tipo.

5. Solución

5.1 Propiedad Control.Tag

Esta propiedad establece o recupera datos de un control. El tipo de dato de esta propiedad es Object; esto quiere decir que instancia de cualquier tipo de dato puede ser asignada.

En el diseñador de Visual Studio esta propiedad se encuentra en la ventana Properties (Propiedades): 
Propiedad Tag en la ventana Properties
Figura 1. Propiedad Tag en la ventana Properties.

5.2 WinForms

5.3.1 Clase ListView

Un objeto de esta clase representa un control de tipo lista para presentar información de objetos en diferentes vistas ("ListView Class", 2016)
  • LargeIcon
  • SmallIcon
  • List
  • Tile

5.3.2 Clase ListViewItem

Este tipo de control representa un elemento integral de ListView ("ListViewItem", 2016). Cuenta, al igual que ListView, con la propiedad Tag.

5.3 Telerik

Estos son los controles sobresalientes usados de esta suite en esta receta.

5.3.1 Clase RadListView

Control que sirve de contenedor de elementos visuales. Es una implementación análoga a System.Windows.Forms.ListView en Telerik.

5.3.2 Clase ListViewDataItem

Esta clase representa un control para la representación de datos en un contenedor del tipo RadListView ("ListViewDataItem Class", 2016).

5.4 DevExpress

[Nota: La implementación en DevExpress utiliza los mismos elementos de programa que se usaron en WinForms.]

6. Práctica: Almacenamiento de Datos en un Control

Estas son las implementaciones de ejemplo bajo WinForms, Telerik y DevExpress.

WinForms

Archivo C# R0702.cs [Enlace alternativo][Enlace alternativo]: 
En las líneas 21-42 se declara el evento OnLoad(EventArgs) en el cual ocurren las siguientes operaciones: 
  • Línea 25: Asegura que la invocación del evento sea correcta.
  • Línea 28: Objeto DirectoryInfo con la información del directorio raíz C:\.
  • Líneas 33-40:
    • Línea 40: Asignación del objeto FileInfo a la propiedad Tag del objeto ListViewItem.
El método lvwContenedorArchivos(object, EventArgs) (líneas 50-57) responde a los eventos de activación de un elemento de la lista ListView.


Esta es una captura de pantalla de la aplicación WinForms en funcionamiento: 
Ejecución receta R0702 [WinForms]
Figura 2. Ejecución receta R0702 [WinForms].

Telerik: 

Archivo C# R0702.cs [Enlace alternativo][Enlace alternativo]: 
En el método OnLoad() se resalta la línea 39: aquí en lugar de crearse un objeto de tipo ListViewItem, como en WinForms nativo, se instancia un objeto de tipo ListViewDataItem. Después, en la línea 45, se asigna a la propiedad Tag un objeto de tipo FileInfo.

Esta es una prueba de ejecución: 
Ejecución receta R0702 [Telerik]
Figura 3. Ejecución receta R0702 [Telerik].


DevExpress

Archivo C# R0702.cs [Enlace alternativo][Enlace alternativo]: 

Esta implementación que cuenta con el uso de controles de DevExpress es análoga a la implementada con los controles de WinForms nativo de Microsoft .NET Framework.


Versión en ejecución: 
Ejecución receta R0702 [DevExpress]
Figura 4. Ejecución receta R0702 [DevExpress].

7. Conclusiones

Quedó demostrado que la propiedad Tag resulta apropiada para la asignación de datos. Esta propiedad es idónea como portador de información en una interfaz gráfica de usuario.


La próxima receta C# también resultará muy interesante: el programador aprenderá a procesar todos los controles en un formulario.

8. Literatura & Enlaces

Jones, A., Freeman (2010). Visual C# 2010 Recipes: A Problem-Solution Approach. United States: Apress.
Control.Tag Property (System.Windows.Forms) (2016, julio 9). Recuperado desde: https://msdn.microsoft.com/en-us/library/system.windows.forms.control.tag%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396
ListView Class (System.Windows.Forms) (2016, julio 9). Recuperado desde: https://msdn.microsoft.com/en-us/library/system.windows.forms.listview(v=vs.110).aspx
ListViewItem Class (System.Windows.Forms) (2016, julio 9). Recuperado desde: https://msdn.microsoft.com/en-us/library/system.windows.forms.listviewitem(v=vs.110).aspx
ListViewDataItem Class (2016, julio 9). Recuperado desde: http://docs.telerik.com/devtools/winforms/api/html/T_Telerik_WinControls_UI_ListViewDataItem.htm
RadListView Class (2016, julio 9). Recuperado desde: http://docs.telerik.com/devtools/winforms/api/html/T_Telerik_WinControls_UI_RadListView.htm


V

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.