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.

Cross-Posting: http://lonetcamp.com

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *