Está en la página 1de 2

Difererencias entre Eval, DataBinder.

Eval y Bind
Lo primero es saber que cuando estamos dentro del contexto de una plantilla,
el elemento al que estamos haciendo referencia con Eval es del tipo de un
elemento del origen de datos. As, si por ejemplo tenemos como origen de
datos un DataTable, el elemento ser del tipo DataRowView, pero si
estamos enlazados a una coleccin de objetos de tipo Empleado, el tipo del
elemento ser Empleado.
Dentro de una plantilla de enlace a datos podemos utilizar:

Container.DataItem

DataBinder.Eval

Eval
Container puede ser casteado al tipo de la plantilla actual por la que estamos
iterando (por ejemplo RepeaterItem), aunque cabe mencionar que si tenemos
un control que implementa INamingContainer dentro de nuestro elemento
actual (por ejemplo un LoginView dentro del RepeaterItem), Container ser
entonces del tipo LoginView y para acceder al control de tipo RepeaterItem
tendremos que escribir algo como Container.NamingContainer. Una vez hemos
accedido al elemento contenedor apropiado, podemos acceder
a Container.DataItem que significa dame el elemento de datos actual por el
que estoy iterando, que adems podr ser casteado de nuevo al tipo del
elemento que sea realmente (DataRowView, Empleado, etc.).
En cualquier caso y como atajo, tambin podemos utilizar la expresin
DataBinder.GetDataItem(Contenedor) donde Contenedor tiene que ser por
ejemplo en nuestro caso, el RepeaterItem.
Por otro lado DataBinder.Eval nos permite acceder a la propiedad indizada sin
conocer el tipo del elemento actual. Ya que si
escribimos DataBinder.Eval(Container.DataItem, Nombre), ASP.NET ser
muy listo y sabr si Nombre es una propiedad del objeto (en el caso
de Empleado) o un campo del DataRowView.
Eval es una nueva instruccin que apareci en ASP.NET 2.0 como versin
reducida deDataBinder.Eval, pero adems de esto, hay ms diferencias entre
ellas:

Eval slo puede utilizarse en el contexto de una plantilla


DataBinder.Eval, adems de poder utilizarse en el contexto de una
plantilla, tambin puede ser utilizado en un procedimiento del codebehind/code-beside
La sintaxis acortada de Eval es diferente de la de DataBinder.Eval en el
hecho de que Eval resuelve automticamente el campo a travs de la
propiedad DataItem del objeto contenedor ms cercano, mientras
que DataBinder.Eval coge el argumento del contenedor (pudiendo elegir

nosotros que contenedor y elemento utilizar a travs de uncast oportuno).


Es por esto que Eval slo se usa dentro de una plantilla de un control de
enlazado de datos y no se puede usar en el nivel de pgina.
Bind es igual en su comportamiento y uso que Eval, slo que adems
soporta la actualizacin, eliminacin e insercin con el control origen de datos.
Esto se denominaTwo-Way, es decir, no slo se enlazan controles de datos a
controles de orgenes de datos para su lectura y presentacin, sino tambin
para modificacin de la capa de datos que subyace a todo este escenario.
Cuando slo se leen datos se denominaOne-Way.
Los controles que soportan Two-Way son:

GridView

DetailsView

FormView
Finalmente, y para un objeto de tipo RootFolder (que bien podra ser
Empleado, CuentaBancaria, DataRowView, etc), podemos ver las distintas
maneras de enlazar datos en una plantilla:
FolderID:<%# CType(Container.DataItem, Entities.RootFolder).FolderID%>
FolderID:<%# DataBinder.Eval(Container.DataItem, " FolderID ")%>
FolderID:<%# Eval("FolderID")%>
http://stackoverflow.com/questions/1778221/understanding-asp-net-eval-andbind