ASP.NET 2.0: Enlace a datos. El método Bind

Para los que habéis empezado a desarrollar con ASP.NET 2.0 y los que lleváis desarrollando mucho tiempo con las otras versiones de ASP.NET, por lo menos yo, echaba de menos en aquellas versiones lo que se denomina Two Way DataBinding (Aunque en versiones anteriores de ASP.NET se podía lograr (Implementing two-way Data Bindingfor ASP.Net Web Forms) que no deja de ser un enlace de un control con una fuente de datos en ambos sentidos (Lectura/Actualización)

En ASP.NET 1.0/1.1, la clase DataBinder nos facilita el método estático Eval, con el cual podemos acceder a los datos de manera simple cuando utilizamos plantillas, pero tiene un problema, sólo permite acceso de sólo lectura (One-Way Binding). A modo de curiosidad, este método utiliza Reflection para ejecutar una búsqueda en la propidad DataItem, mirando en los metadatos almacenados en los tipos de la assembly. Una vez que los metadatos son recuperados se encarga de enlazarlos con el control que se ha especificado.

Un ejemplo:

<%# Eval("Idempleado") %>

Ademas el método Eval contiene una sobrecarga que nos permite formatear el dato:

<%# Eval("sueldo", "{0:C}") %>

Para solucionar este problema, la gente de Microsoft ha añadido el método Bind, que permite el famoso Two Way DataBinding (Valgamé la redundancia) pero los únicos controles que permiten el uso de Bind son:

  • GridView
  • DetailsView
  • FormView

También está sobrecargado como Eval y permite formatear los datos.

<%# Bind("Idempleado") %>

<%# Bind("sueldo", "{0:C}") %>

Nota: Un control que es enlazado a una fuente de datos mediante el método Bind es obligatorio establecer su propiedad ID.

Salu2

Published 16/3/2007 12:11 por Luis Ruiz Pavón
Archivado en:
Comparte este post:
http://geeks.ms/blogs/lruiz/archive/2007/03/16/asp-net-2-0-el-m-todo-bind.aspx

Comentarios

# re: ASP.NET 2.0: Enlace a datos. El método Bind

No consigo usar una función para que me devuelva el formato:

<%# Bind("sueldo", me.FormatoSueldo)() %>

¿Hay alguna forma de hacerlo? Porque necesito que el formato cambie según el usuario y/o región.

Gracias.

Monday, April 02, 2007 3:46 PM por pablo

# re: ASP.NET 2.0: Enlace a datos. El método Bind

perdón, he escrito mal el ejemplo anterior, debiera ser:

<%# Bind("sueldo", me.FormatoSueldo()) %>

la pregunta sigue siendo la misma. ¿Es posible hacer algo así sin usar "Eval" que no es bi-direccional?

Monday, April 02, 2007 3:48 PM por pablo

# re: ASP.NET 2.0: Enlace a datos. El método Bind

Hola Pablo:

No te sirve el ejemlplo:

<%# Bind("sueldo", "{0:C}") %>

Salu2

Monday, April 16, 2007 8:45 AM por Luis Ruiz Pavón

# re: ASP.NET 2.0: Enlace a datos. El método Bind

Hola, la pregunta es que sucede con los enlaces a datos en controles de ajax??, por ejemplo en el CascadingDropDown, ya que antes de usarlo para cargar los DropDownList lo hacía con DataSource u Objetos empresariales y lo hacía en el SelectedValue del ddl (con Bind) y funcionaba tanto para el select como para el update, ahora cargo el ddl con el CascadingDropDown y selecciono el valor indicado pero despues cuando quiero actualizarlo no me lo permite, ya que dice que la cadena de entrada no es la correcta, cual es la forma en que se debería usar el enlace a datos en un FormView con DropDownList y CascadingDropDown de manera de poder recuperar los datos de la BD y a su vez actualizarlos???

 Atte.

  Danilo

Thursday, September 06, 2007 7:12 AM por Danilo

# re: ASP.NET 2.0: Enlace a datos. El método Bind

O sea, esto no funciona, para poder actualizar los datos:

 <asp:DropDownList ID="ddlNacionalidad"

                   runat="server"  

 </asp:DropDownList>

<cc1:CascadingDropDown ID="ccdNacionalidad"

                      runat="server"

                      Category="Nacionalidad"

             TargetControlID="ddlNacionalidad"

             PromptText="Seleccione"

             LoadingText="[Loading...]"

        ServicePath="../WerServices/Localidades.asmx"

             ServiceMethod="GetNacionalidad"  

Enabled="True"

SelectValue='<%#Eval("PrsNacionalidadID")%>'

</cc1:CascadingDropDown>        

   Danilo

Thursday, September 06, 2007 7:26 AM por Danilo

# re: ASP.NET 2.0: Enlace a datos. El método Bind

Disculpen, quise decir:

SelectValue='<%#Bind("PrsNacionalidadID")%>'

Thursday, September 06, 2007 7:28 AM por Danilo

# re: ASP.NET 2.0: Enlace a datos. El método Bind

Saludos, tengo un control de usuario dentro de un GridView, este control de usuario recibe un número decimal (una calificación) y lo representa como estrellas, es decir un gráfico que represente la calificación. El problema es que al control de usuario le paso <%# Bind("calificacion") %> y me manda un Invalidad Cast Exception. Lo intento de esta forma

<uc1:FormatoCalificacion  calificacion='<%#Bind("calificacion") %>' ID="FormatoCalificacion1" runat="server" />

En el user control tengo un método que se llama calificacion que recibe un valor decimal y hace todas las operaciones para representarlo como estrellas. Ya intenté hacerle un ToString al bind pero aun así recibo el mismo error :-s espero puedas ayudarme

Monday, November 19, 2007 10:14 PM por Alfredo

# re: ASP.NET 2.0: Enlace a datos. El método Bind

Tengo mi carpeta img donde guardo mis imagenes, cada uno tiene por nombre su codigo, como hago para reenviar ese codigo y concatenarlo a un objeto html, algo asi <img src=img/& '"codigo"'"

ya se que puedo usar cookies o sesiones para el dato, pero como lo concateno en el html.

Saludos.. Gracias

Thursday, March 12, 2009 9:29 PM por Alfredo

# re: ASP.NET 2.0: Enlace a datos. El método Bind

hola muy interesando este metodo, lo estoy usando en un gridview, pero necesito pasarle mas de un campo de esta forma

CommandArgument='<%# Bind("DEPVABRDEP", "CROSANHO", "CROSCORREL") %>'

pero me sale un error que no tiene el formato correcto, necesito estos tres campos puesto que es una llave compuesta por ellos...agradeceria la ayuda

saludos

Sunday, August 29, 2010 11:15 PM por jonny

# re: ASP.NET 2.0: Enlace a datos. El método Bind

hola bueno el tema pero igual no me resulta =D. me sale el error de eval path y bind...

""Los métodos de enlace de datos como Eval(), XPath() y Bind() sólo se pueden utilizar en el contexto de un control de enlace de datos.""

dentro de un form puse 2 dropdownlist y al marcar 1 el otro automaticamente se adaptaba para x su id pero al momento de hacer la referencia a bind o eval genero el mensaje anterior alguna otra referencia. Cuando estan sin enlace de datos funcionan bien pero al momento de enlazarlo generan el error.

agradeceria alguna informacion

Monday, September 13, 2010 6:12 PM por Mauricio

# Tip/Trick: DataBinding to Generics

Después de publicar algunos artículos y tener que enlazar muchos datos en mis ejemplos

Wednesday, August 03, 2011 9:49 PM por Marc Rubiño