| Objectivo |
| Crear un metodo que no este sujeto a un query especifico y que retorne un control poblado de datos. |
| Requisito: |
|
| Nota: |
|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Reflection;
using System.Globalization;
using System.ComponentModel;
public partial class _Default : System.Web.UI.Page
{
#region Evento Load de la pagina
protected void Page_Load(object sender, EventArgs e)
{
AdventureWorks_DataModel.AdventureWorks_DataEntities db = new AdventureWorks_DataModel.AdventureWorks_DataEntities();
form1.Controls.Add(ControlBuilder<AdventureWorks_DataModel.Product, DropDownList>(db.Products.Select(dd => dd).ToList(), "ProductID", "Name", "dd1", "hola"));
}
#endregion Evento Load de la pagina
#region Generic Method
private static U ControlBuilder<T, U>(List<T> row, string datavaluefieldname, string datatextfieldname, string id, string Etiqueta)
where T : class
where U : class
{
Type ControlToReturnType = typeof(U);
DropDownList ControlToReturn = (DropDownList)ControlToReturnType.InvokeMember
(
null,
BindingFlags.Public |
BindingFlags.Instance |
BindingFlags.CreateInstance,
null,
null,
null
);
ControlToReturn.ID = id;
ControlToReturn.AutoPostBack = true;
ControlToReturn.CausesValidation = false;
ControlToReturn.Width = System.Web.UI.WebControls.Unit.Percentage(100);
ControlToReturn.SelectedIndexChanged += new EventHandler(ControlToReturn_SelectedIndexChanged);
foreach (T item in row)
{
PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(item);
System.ComponentModel.PropertyDescriptor MyProperty1 = properties.Find(datatextfieldname, false);
System.ComponentModel.PropertyDescriptor MyProperty2 = properties.Find(datavaluefieldname, false);
ListItem li = new ListItem();
li.Text = MyProperty1.GetValue(item).ToString();
li.Value = MyProperty2.GetValue(item).ToString();
ControlToReturn.Items.Add(li);
}
ListItem EtiquetaApertura = new ListItem();
EtiquetaApertura.Enabled = true;
EtiquetaApertura.Selected = true;
EtiquetaApertura.Value = null;
EtiquetaApertura.Text = Etiqueta;
ControlToReturn.Items.Insert(0, EtiquetaApertura);
return ControlToReturn as U;
}
#endregion GenericMethod
#region Manejador de evento para el control
static void ControlToReturn_SelectedIndexChanged(object sender, EventArgs e)
{
DropDownList dl = (DropDownList)sender;
Page page = (Page)dl.NamingContainer;
Label lb = (Label)page.FindControl("lb1");
lb.Text = dl.SelectedValue;
}
#endregion Manejador de evento para el control
}
|
| Descripcion: |
private static U ControlBuilder<T, U>(List<T> row, string datavaluefieldname, string datatextfieldname, string id, string Encabezado)
where T : class
where U : class
{
}
Type ControlToReturnType = typeof(U); DropDownList ControlToReturn = (DropDownList)ControlToReturnType.InvokeMember
(
null,
BindingFlags.Public |
BindingFlags.Instance |
BindingFlags.CreateInstance,
null,
null,
null
);
ControlToReturn.ID = id; ControlToReturn.AutoPostBack = true; ControlToReturn.CausesValidation = false; ControlToReturn.Width = System.Web.UI.WebControls.Unit.Percentage(100); ControlToReturn.SelectedIndexChanged += new EventHandler(ControlToReturn_SelectedIndexChanged); foreach (T item in row)
{
// Creo una nueva colleccion y le asigno a esta las prepiedades de item.
PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(item);
// Seteo el PropertyDescriptor a la propiedad especificada.
System.ComponentModel.PropertyDescriptor MyProperty1 = properties.Find(datatextfieldname, false);
System.ComponentModel.PropertyDescriptor MyProperty2 = properties.Find(datavaluefieldname, false);
ListItem li = new ListItem();
li.Text = MyProperty1.GetValue(item).ToString();
li.Value = MyProperty2.GetValue(item).ToString();
ControlToReturn.Items.Add(li);
}
ListItem EtiquetaApertura = new ListItem();
EtiquetaApertura.Enabled = true;
EtiquetaApertura.Selected = true;
EtiquetaApertura.Value = null;
EtiquetaApertura.Text = Encabezado;
ControlToReturn.Items.Insert(0, EtiquetaApertura);
return ControlToReturn as U;
}
System.ComponentModel.PropertyDescriptor MyProperty1 = properties.Find(datatextfieldname, falseSystem.ComponentModel.PropertyDescriptor MyProperty2 = properties.Find(datavaluefieldname, false); ListItem li = new ListItem();m(); li.Text = MyProperty1.GetValue(item).ToString(); li.Value = MyProperty2.GetValue(item).ToString(); ControlToReturn.Items.Add(li); ListItem EtiquetaApertura = new ListItem(); EtiquetaApertura.Enabled = true; EtiquetaApertura.Selected = true; EtiquetaApertura.Value = null; EtiquetaApertura.Text = Encabezado; ControlToReturn.Items.Insert(0, EtiquetaApertura); return ControlToReturn as U; static void ControlToReturn_SelectedIndexChanged(object sender, EventArgs e)
{
DropDownList dl = (DropDownList)sender;
Page page = (Page)dl.NamingContainer;
Label lb = (Label)page.FindControl("lb1");
lb.Text = dl.SelectedValue;
}
|
lunes, 22 de agosto de 2011
Metodo Generico
Suscribirse a:
Comentarios (Atom)