Marc Rubiño

ASP.NET, C#, AJAX.NET, JavaScript, etc.

Tip/Trick: DataBinding to Generics

Después de publicar muchos ejemplos 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.

Posted: may 20 2009, 11:18 por Marc Rubiño | con no comments
Archivado en:
Deja tu comentario

(requerido) 

(requerido) 

(opcional)

(requerido)