lunes, 5 de enero de 2015

Usando reflection, un ejemplo practico con C Sharp "C#"



Reflection es una herramienta sencilla en su concepto, pero un poco difícil en su manejo. Permite el acceso a objetos (ensamblados, módulos, propiedades, tipos de datos, etc) de manera dinámica.
Para poder comprender un poco más del tema, voy a mostrar el siguiente ejemplo:

Tengo una cantidad “n” de clases que necesito mostrar en formularios web, para evitar escribir por cada atributo de cada clase la sentencia de asignación de la propiedad al control web “txtUsuario.text = objeto.usuario”. Cree una clase con un método en la carpeta App_code de nombre “ManejoControles”, a esta clase le paso como parámetros el objeto y un panel que contiene los controles. Esta clase se encarga de recorrer los controles contenidos en el panel, en caso de ser  alguno de tres predeterminados (Texto, DropDownList y RadioButtonList), se busca por el nombre del control en el objeto el valor y se le asigna al control. (Espero haberme hecho entender).

Como estándar a cada control le asigno una nomenclatura en su nombre, las tres primeras letras corresponden al tipo de control y el resto del nombre corresponde al nombre de la propiedad del objeto. Adicionalmente dejo todos los controles que quiero llenar con los valores del atributo de un objeto dentro de un control panel de asp.net.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Logica;
using Entidades;
using System.Reflection;

        public void ObjetoPanel(Panel Panel, object Objeto)
        {
            String TipoControl;
            String Nombre = String.Empty;

            foreach (Control oControl in Panel.Controls)
            {
                TipoControl = oControl.GetType().ToString();
                switch (TipoControl)
                {
                    case "System.Web.UI.WebControls.TextBox":
                        TextBox oTextBox = (TextBox)oControl;
                        Nombre = oTextBox.ID.Substring(3, oTextBox.ID.Length - 3);
                        oTextBox.Text = Convert.ToString(Objeto.GetType().GetProperty(Nombre).GetValue(Objeto, null));
                        break;
                    case "System.Web.UI.WebControls.DropDownList":
                        DropDownList oLista = (DropDownList)oControl;
                        Nombre = oLista.ID.Substring(3, oLista.ID.Length - 3);
                        oLista.SelectedValue = Convert.ToString(Objeto.GetType().GetProperty(Nombre).GetValue(Objeto, null));
                        break;
                    case "System.Web.UI.WebControls.RadioButtonList":
                        RadioButtonList oRadio = (RadioButtonList)oControl;
                        Nombre = oRadio.ID.Substring(3, oRadio.ID.Length - 3);
                        oRadio.SelectedValue = Convert.ToString(Objeto.GetType().GetProperty(Nombre).GetValue(Objeto, null));
                        break;
                }

            }

        }

Si este ejemplo les es de utilidad, por favor no olvidar dejar un comentario o like.

Para el ejemplo use Web developer express 2013 que se consigue aquí.

2 comentarios:

Entrada destacada

Arquitectura de N-Capas con Visual Studio .NET y AngularJS

Este artículo es el primero de una serie de artículos en que quiero explicar mi visión de la programación por capas. La Arquitectura ...