Tip/Trick: DataBinding to Generics

Después de publicar algunos artículos y tener que enlazar  muchos datos en mis ejemplos ASP.NET echaba de menos poder hacer un enlace simple a mis controles ASP.NET sin tener que hacer clases y luego hacer una lista de las mismas para poder utilizar el DataSource sin problemas.

Para hacer un enlace normal,  lo primero tenemos que hacer es un objeto personalizado y luego utilizar una lista genérica para el enlace a datos.

Ejemplo uso normal con un tipo anónimo:

var Item = new { Key = 1, Value = "Coche" };
var Lista = (new[] { Item }).ToList();
Lista.Add(new { Key = 2, Value = "Moto" });

DataList1.DataSource = Lista;
DataList1.DataBind();

Luego en nuestro control  enlazado a datos  ASP.NET  tenemos el enlace al origen del registro:

<ItemTemplate>
   <asp:CheckBox runat="server" Text='<%# Eval("Value") %>' />
</ItemTemplate>

Pero podemos utilizar un truquito para enlazar directamente nuestras listas genéricas sin que tengan que contener objetos.

Ejemplo 1:  con un diccionario.

Dictionary<int, string> diccionario = new Dictionary<int, string>();
diccionario.Add(1, "Coche");
diccionario.Add(2, "Moto");

Solo tenemos que especificar que campo es la clave y cuál es el valor.

<Columns>
  <asp:BoundField DataField="Key" HeaderText="Key" />
  <asp:BoundField DataField="Value" HeaderText="Value”/>
</Columns>

Ejemplo 2: Con una lista.

List<string> lista = new List<string>();
lista.Add("Coche");

Y el enlace a datos especificamos que utilice los datos directamente del DataItem:

<ItemTemplate>
  <asp:CheckBox ID="chkItem" Text='<%# Container.DataItem %>' />
</ItemTemplate>

Dos ejemplos simples pero muy eficaces.

Otros recursos de controles enlazados a Datos:

http://msdn.microsoft.com/es-es/library/aa479321.aspx

http://geeks.ms/blogs/lruiz/archive/2007/03/16/asp-net-2-0-el-m-todo-bind.aspx

http://weblogs.asp.net/scottgu/archive/2003/11/03/35645.aspx

Espero que os sea útil ;-)

Saludos.

Anuncios

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