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í.