Información general sobre las expresiones de enlace de datos

Actualización: noviembre 2007

La sintaxis de enlace de datos permite enlazar los valores de las propiedades de los controles a los datos y especificar valores para recuperar, actualizar, eliminar e insertar datos.

Sintaxis de enlace de datos

Las expresiones de enlace de datos están contenidas dentro de los delimitadores <%# y %>, y utilizan las funciones Eval y Bind. La función Eval se utiliza para definir un enlace de tipo unidireccional (de sólo lectura). La función Bind se utiliza para el enlace de tipo bidireccional (actualizable). Además de llamar a los métodos Eval y Bind para realizar el enlace de datos en una expresión de enlace de datos, puede llamar a cualquier código de ámbito público incluido en los delimitadores <%# y %> para ejecutar dicho código y devolver un valor durante el procesamiento de la página.

Las expresiones de enlace de datos se resuelven cuando se llama al método DataBind de un control o de la clase Page. Para los controles como GridView, DetailsView y FormView, las expresiones de enlace de datos se resuelven automáticamente durante el evento PreRender del control y no es necesario llamar al método DataBind de forma explícita.

En el ejemplo de código siguiente se muestra el uso de las expresiones de enlace de datos con un control FormView en una propiedad ItemTemplate.

<asp:FormView ID="FormView1"
  DataSourceID="SqlDataSource1"
  DataKeyNames="ProductID"     
  RunAt="server">

  <ItemTemplate>
    <table>
      <tr><td align="right"><b>Product ID:</b></td>       <td><%# Eval("ProductID") %></td></tr>
      <tr><td align="right"><b>Product Name:</b></td>     <td><%# Eval("ProductName") %></td></tr>
      <tr><td align="right"><b>Category ID:</b></td>      <td><%# Eval("CategoryID") %></td></tr>
      <tr><td align="right"><b>Quantity Per Unit:</b></td><td><%# Eval("QuantityPerUnit") %></td></tr>
      <tr><td align="right"><b>Unit Price:</b></td>       <td><%# Eval("UnitPrice") %></td></tr>
    </table>                 
  </ItemTemplate>                   
</asp:FormView>
<asp:FormView ID="FormView1"
  DataSourceID="SqlDataSource1"
  DataKeyNames="ProductID"     
  RunAt="server">

  <ItemTemplate>
    <table>
      <tr><td align="right"><b>Product ID:</b></td>       <td><%# Eval("ProductID") %></td></tr>
      <tr><td align="right"><b>Product Name:</b></td>     <td><%# Eval("ProductName") %></td></tr>
      <tr><td align="right"><b>Category ID:</b></td>      <td><%# Eval("CategoryID") %></td></tr>
      <tr><td align="right"><b>Quantity Per Unit:</b></td><td><%# Eval("QuantityPerUnit") %></td></tr>
      <tr><td align="right"><b>Unit Price:</b></td>       <td><%# Eval("UnitPrice") %></td></tr>
    </table>                 
  </ItemTemplate>                 
</asp:FormView>

Utilizar el método Eval

El método Eval evalúa las expresiones de datos enlazados tardíamente en las plantillas de controles enlazados a datos, como GridView, DetailsView y FormView. En tiempo de ejecución, el método Eval llama al método Eval del objeto DataBinder, haciendo referencia al elemento de datos actual del contenedor de nombres. El contenedor de nombres suele ser la parte más pequeña del control enlazado a datos que contiene un registro completo, como una fila de un control GridView. Por consiguiente, el método Eval sólo se puede utilizar para el enlace dentro de las plantillas de un control enlazado a datos.

El método Eval toma el nombre de un campo de datos y devuelve una cadena que contiene el valor de dicho campo desde el registro actual en el origen de datos. Puede proporcionar un segundo parámetro opcional a fin de especificar un formato para la cadena devuelta. El parámetro de formato de cadena utiliza la sintaxis definida para el método Format de la clase String.

Utilizar el método Bind

El método Bind tiene algunas similitudes con el método Eval, pero hay diferencias significativas. Aunque los valores de los campos enlazados a datos se pueden recuperar con el método Bind o con el método Eval, el método Bind también se utiliza cuando se pueden modificar los datos.

En ASP.NET, los controles enlazados a datos como GridView, DetailsView y FormView pueden utilizar automáticamente las operaciones de actualización, supresión e inserción de un control de origen de datos. Por ejemplo, si ha definido instrucciones SQL Select, Insert, Delete y Update para el control de origen de datos, el uso de Bind en un control GridView o DetailsView, o en una plantilla de control FormView permite al control extraer los valores de los controles secundarios de la plantilla y pasarlos al control de origen de datos. El control de origen de datos a su vez ejecuta el comando correspondiente para la base de datos. Por esta razón, la función Bind se utiliza dentro de las propiedades EditItemTemplate o InsertItemTemplate de un control enlazado a datos.

El método Bind suele emplearse con controles de entrada como TextBox representado por una fila GridView en modo de edición. Cuando el control enlazado a datos crea estos controles de entrada como parte de su propia representación, puede extraer los valores de entrada.

El método Bind toma el nombre de un campo de datos para asociarle a la propiedad enlazada, como se muestra en el ejemplo siguiente:

<EditItemTemplate>
  <table>
    <tr>
      <td align=right>
        <b>Employee ID:</b>
      </td>
      <td>
        <%# Eval("EmployeeID") %>
      </td>
    </tr>
    <tr>
      <td align=right>
        <b>First Name:</b>
      </td>
      <td>
        <asp:TextBox ID="EditFirstNameTextBox" RunAt="Server"
          Text='<%# Bind("FirstName") %>' />
      </td>
    </tr>
    <tr>
      <td align=right>
        <b>Last Name:</b>
      </td>
      <td>
        <asp:TextBox ID="EditLastNameTextBox" RunAt="Server"
            Text='<%# Bind("LastName") %>'  />
      </td>
    </tr>
    <tr>
      <td colspan="2">
        <asp:LinkButton ID="UpdateButton" RunAt="server"
          Text="Update" CommandName="Update" />
        &nbsp;
        <asp:LinkButton ID="CancelUpdateButton" RunAt="server"
          Text="Cancel" CommandName="Cancel" />
      </td>
    </tr>
  </table>
</EditItemTemplate>

Cuando se hace clic en el botón Update de la fila, los valores de cada propiedad de control enlazada mediante Bind se extraen y se pasan al control de origen de datos para la operación de actualización.

Llamar al método DataBind de forma explícita

Los controles como GridView, FormView y DetailsView realizan el enlace llamando al método DataBind de forma implícita cuando se enlazan a un control de origen de datos mediante la propiedad DataSourceID. Sin embargo, hay situaciones en las que es necesario llamar al método DataBind de forma explícita.

Una situación posible consiste en enlazar un control a un control a un control de origen de datos con la propiedad DataSource en lugar de la propiedad DataSourceID. En ese caso, necesitaría llamar explícitamente al método DataBind para realizar el enlace de datos y resolver las expresiones de enlace de datos.

Otra situación consiste en que se necesite actualizar manualmente los datos de un control enlazado a datos. Imagine una página en la que hay dos controles que muestran información proveniente de la misma base de datos (tal vez con vistas diferentes). En ese caso, tendría que volver a enlazar explícitamente el control a los datos para mantener sincronizada la visualización de la información. Por ejemplo, podría existir un control GridView que muestra una lista de productos y un control DetailsView que permite a los usuarios editar un producto determinado. Aunque los controles GridView y DetailsView muestran datos del mismo origen, están enlazados a controles de origen de datos distintos dado que utilizan consultas diferentes para obtener sus datos. Un usuario podría actualizar un registro mediante el control DetailsView y hacer que el control de origen de datos asociado lleve a cabo la actualización. Sin embargo, dado que el control GridView está enlazado a un control de origen de datos diferente, mostrará los valores antiguos de los registros hasta que se actualice la página. Por consiguiente, una vez que se actualizan los datos mediante el control DetailsView, puede llamar al método DataBind. Esto hace que el control GridView actualice también su vista el volver a ejecutar las expresiones de enlace de datos y el código de ámbito público incluidos en los delimitadores <%# y %>. En consecuencia, el control GridView reflejará la actualización efectuada por el control DetailsView.

Vea también

Tareas

Cómo: Enlazar a los datos de un control con plantilla

Conceptos

Establecer enlaces a bases de datos

Establecer enlaces con objetos comerciales

Establecer enlaces a datos jerárquicos

Información general sobre el acceso a datos en ASP.NET