Introducción al enlace de datos de ASP.NET

Seleccione idioma Seleccione idioma
Id. de artículo: 307860 - Ver los productos a los que se aplica este artículo
Este artículo se publicó anteriormente con el número E307860
Este artículo hace referencia a los siguientes espacios de nombres de la Biblioteca de clases de Microsoft .NET Framework:
  • System.Data
  • System.Data.SqlClient
Expandir todo | Contraer todo

En esta página

Resumen

Este artículo proporciona una introducción al enlace de datos de ASP.NET.

Para obtener información general adicional acerca de ASP.NET, consulte el siguiente artículo de Microsoft Knowledge Base:
305140 Guía básica de ASP.NET

Más información

Con el enlace de datos de ASP.NET, se puede enlazar cualquier control de servidor a propiedades, colecciones, expresiones y métodos simples. Cuando utilice el enlace de datos, tendrá más flexibilidad a la hora de utilizar datos de una base de datos u otros recursos.

En este artículo se tratan los siguientes temas de enlace de datos:

Fundamentos del enlace de datos

<%# %> Sintaxis

ASP.NET presenta una nueva sintaxis declarativa, <%# %>. Esta sintaxis es la base para utilizar el enlace de datos en una página .aspx. Todas las expresiones de enlace de datos deben ir incluidas dentro de estos caracteres. La lista siguiente muestra ejemplos de enlace de datos simple desde múltiples orígenes:
  • Propiedad simple (sintaxis para un cliente):
    <%# custID %>
    					
  • Colección (sintaxis para un pedido):
    <asp:ListBox id="List1" datasource='<%# myArray %>' runat="server">
    					
  • Expresión (sintaxis para un contacto):
    <%# ( customer.First Name + " " + customer.LastName ) %>
    					
  • Resultado del método (sintaxis para el balance pendiente):
    <%# GetBalance(custID) %>
    					
En los ejemplos anteriores, las etiquetas <%# %> en línea indican dónde se colocará la información de un origen de datos específico en la página .aspx. El siguiente ejemplo de enlace de datos utiliza un control de servidor web TextBox:
<asp:textbox id=txt text="<%# custID %>" runat=server />
				
Para obtener más información acerca de la sintaxis de enlace de datos, consulte la siguiente documentación del Kit de desarrollo de software (SDK) de .NET Framework:
Sintaxis de la expresión de enlace de datos
http://msdn.microsoft.com/es-es/library/bda9bbfx(vs.71).aspx

Page.DataBind() frente a Control.DataBind()

Una vez determinados los orígenes de datos y establecidos los objetos correspondientes en la página .aspx, tiene que enlazar los datos a esos orígenes de datos. Puede utilizar el método Page.DataBind o Control.DataBind para enlazar los datos a los orígenes de datos.

Ambos métodos funcionan de forma similar. La diferencia principal consiste en que, después de llamar al método Page.DataBind, todos los orígenes de datos se enlazan a sus controles de servidor. Ningún dato se procesa en el control hasta que llame explícitamente al método DataBind del control de servidor web o al método Page.DataBind en el nivel de página. Normalmente, Page.DataBind (o DataBind) se llama desde el evento Page_Load.

Para obtener más información acerca del método DataBind, consulte la siguiente documentación del SDK de .NET Framework: Método Control.DataBind
http://msdn.Microsoft.com/en-us/library/w5e5992d.aspx

Controles de lista enlazados a datos

Se trata de controles de servidor web que se pueden enlazar a colecciones. Puede utilizar estos controles para presentar filas de datos en un formato de plantilla personalizada. Todos los controles de lista exponen las propiedades DataSource y DataMember, que se utilizan para enlazar a colecciones.

Estos controles pueden enlazar su propiedad DataSource a cualquier colección que admita la interfaz IEnumerable, ICollection o IListSource.

Control Repeater

El control Repeater es una lista enlazada a datos en plantillas. El control Repeater no tiene "apariencia"; es decir, no tiene ningún diseño o estilo integrado. Por tanto, tiene que declarar explícitamente todas las etiquetas de estilo, el diseño HTML y el formato en las plantillas del control.

Los siguientes ejemplos de código muestran cómo se puede utilizar un control de lista, el control Repeater, para mostrar datos:

NOTA: debe modificar los parámetros de la cadena de conexión como sea necesario para su entorno.

Visual Basic .NET
<%@ Page Language="vb" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>

<script runat="server">
Sub Page_Load(sender As Object, e As EventArgs)

   Dim cnn As SqlConnection = New SqlConnection("server=(local);" & _
                                                "database=pubs;Integrated Security=SSPI")
   Dim cmd As SqlDataAdapter = New SqlDataAdapter("select * from authors", cnn)
   Dim ds As DataSet = New DataSet()
   cmd.Fill(ds)
   Repeater1.DataSource = ds
   Repeater1.DataBind()

End Sub
</script>
<html>
<body>
   <form id="Form1" method="post" runat="server">
      <asp:Repeater id="Repeater1" runat="server">
         <ItemTemplate>
         <%# DataBinder.Eval(Container.DataItem,"au_id") %><br>
	 </ItemTemplate>
      </asp:Repeater>
   </form>
</body>
</html>
				
Visual C# .NET
<%@ Page language="c#" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>

<script runat="server">
void Page_Load(Object sender, EventArgs e) 
{ 
   SqlConnection cnn = new 
       SqlConnection("server=(local);database=pubs;Integrated Security=SSPI"); 
   SqlDataAdapter da = new SqlDataAdapter("select * from authors", cnn); 
   DataSet ds = new DataSet(); 
   da.Fill(ds, "authors"); 
   Repeater1.DataSource = ds.Tables["authors"];
   Repeater1.DataBind();
}
</script>
<html>
<body>
   <form id="WebForm2" method="post" runat="server">
      <asp:Repeater id="Repeater1" runat="server">
         <ItemTemplate>
         <%# DataBinder.Eval(Container.DataItem,"au_id") %><br>
    	 </ItemTemplate>
      </asp:Repeater>
   </form>
</body>
</html>
				
Visual J# .NET
<%@ Page language="VJ#" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>

 <script runat="server">
void Page_Load(Object sender, EventArgs e) 
{ 
    SqlConnection cnn = new SqlConnection("server=(local);database=pubs;Integrated
         Security=SSPI"); 
    SqlDataAdapter da = new SqlDataAdapter("select * from authors", cnn); 
    DataSet ds = new DataSet(); 
    da.Fill(ds, "authors"); 
    DataTableCollection dtc = ds.get_Tables();
    int index = dtc.IndexOf("authors");
    Repeater1.set_DataSource(dtc.get_Item(index));
    Repeater1.DataBind();
}
</script>
<html>
<body>
   <form id="WebForm2" method="post" runat="server">
      <asp:Repeater id="Repeater1" runat="server">
         <ItemTemplate>
         <%# DataBinder.Eval(Container.DataItem,"au_id") %><br>
             </ItemTemplate>
      </asp:Repeater>
   </form>
</body>
</html>
				
Para obtener más información acerca del control Repeater, consulte la siguiente documentación del SDK de .NET Framework:
Repeater Web Server Control Overview
http://msdn.microsoft.com/es-es/library/x8f2zez5.aspx

Control DataList

La clase DataList es una lista enlazada a datos en plantillas, rica en características. Puede modificar las plantillas para personalizar este control. A diferencia del control Repeater, DataList admite el procesamiento direccional y se puede procesar opcionalmente en una tabla HTML en tiempo de ejecución.

Para obtener más información acerca del control DataList, consulte la siguiente documentación del SDK de .NET Framework:
DataList Web Server Control
http://msdn.microsoft.com/es-es/library/9cx2f3ks(VS.85).aspx

Control DataGrid

El control DataGrid es una cuadrícula enlazada a datos completa con múltiples columnas. Para personalizar el diseño de columnas individuales en el control DataGrid, puede establecer el tipo de columna a "en plantilla" y modificar las plantillas de las columnas. El control DataGrid puede procesarse sin plantillas, que hace que este control sea ideal para escenarios de informes. DataGrid también admite la selección, modificación, eliminación, paginación y ordenación por columna y por columnas de botones.

Para obtener más información acerca del control DataGrid, consulte la siguiente documentación del SDK de .NET Framework:
DataGrid Web Server Control
http://msdn.microsoft.com/es-es/library/aa710742(VS.71).aspx

Acceso a datos

En esta sección se describe cómo tener acceso a datos desde una base de datos y enlazar los datos a controles de lista. Puede utilizar la clase DataSet o DataReader para obtener datos desde una base de datos.

Clase DataSet

Un DataSet contiene una representación completa de datos, incluida la estructura de tablas, las relaciones entre tablas y la ordenación de los datos. Las clases DataSet son lo bastante flexibles para almacenar cualquier tipo de información proveniente de una base de datos en un archivo de Lenguaje de marcado extensible (XML, Extensible Markup Language). DataSet es una clase sin estado; es decir, se puede pasar del cliente al servidor sin consumir recursos de conexión del servidor. El código siguiente demuestra cómo utilizar una clase DataSet para enlazar datos a un control:

NOTA: debe modificar los parámetros de la cadena de conexión como sea necesario para su entorno.

Visual Basic .NET
Dim cnn As SqlConnection = New SqlConnection("server=(local);" & _
                                             "database=pubs;Integrated Security=SSPI")
Dim cmd As SqlDataAdapter = New SqlDataAdapter("select * from authors", cnn)
Dim ds As DataSet = New DataSet()
cmd.Fill(ds)
MyRepeater.DataSource = ds
MyRepeater.DataBind() 
				
Visual C# .NET
SqlConnection cnn = new SqlConnection("server=(local);
                                       database=pubs;Integrated Security=SSPI"); 
SqlDataAdapter da = new SqlDataAdapter("select * from authors", cnn); 
DataSet ds = new DataSet(); 
da.Fill(ds);
MyRepeater.DataSource = ds;
MyRepeater.DataBind(); 
				
Visual J# .NET
SqlConnection cnn = new SqlConnection("server=(local);
                                       database=pubs;Integrated Security=SSPI"); 
SqlDataAdapter da = new SqlDataAdapter("select * from authors", cnn); 
DataSet ds = new DataSet(); 
da.Fill(ds); 
MyRepeater.set_DataSource(ds);
MyRepeater.DataBind();
				
Para obtener más información acerca de la clase DataSet, consulte la siguiente documentación del SDK de .NET Framework:
Clase DataSet
http://msdn.microsoft.com/es-es/library/system.data.dataset(vs.71).aspx

Clase DataReader

A la inversa, si solo necesita presentar (y no cambiar) los datos que se van a procesar, una clase DataReader puede ser una solución mejor. Por ejemplo, es mejor utilizar una clase DataReader para un control DropDownList porque DataReader es un cursor de datos de solo avance. El código siguiente demuestra cómo utilizar una clase SqlDataReader para enlazar datos a un control:

Visual Basic .NET
Dim cnn As SqlConnection = New SqlConnection("server=(local);" & _
                                             "database=pubs;Integrated Security=SSPI")
Dim cmd As SqlCommand = New SqlCommand("select * from authors", cnn)

cnn.Open()
MyRepeater.DataSource = cmd.ExecuteReader(CommandBehavior.CloseConnection)
MyRepeater.DataBind()
				
Visual C# .NET
SqlConnection cnn = new SqlConnection("server=(local);
                                       database=pubs;Integrated Security=SSPI");
SqlCommand cmd = new SqlCommand("select * from authors", cnn);

cnn.Open();
MyRepeater.DataSource = cmd.ExecuteReader(CommandBehavior.CloseConnection);
MyRepeater.DataBind();
				
Visual J# .NET
SqlConnection cnn = new SqlConnection("server=(local);
                                       database=pubs;Integrated Security=SSPI"); 

SqlCommand cmd = new SqlCommand("select * from authors", cnn); 

cnn.Open();
MyRepeater.set_DataSource(cmd.ExecuteReader(CommandBehavior.CloseConnection));
MyRepeater.DataBind();
				
Para obtener más información acerca de la clase SqlDataReader y el acceso de datos con ASP.NET, vea los temas siguientes en la documentación del SDK de .NET Framework:
SqlDataReader Class
http://msdn.microsoft.com/es-es/library/system.data.sqlclient.sqldatareader.aspx

Developing High-Performance ASP.NET Applications
http://msdn.microsoft.com/es-es/library/5dws599a(vs.71).aspx

Enlaces en plantillas de control de lista

Puede utilizar las plantillas de los controles de lista para enlazar y personalizar registros individuales de un origen de datos. Esta sección incluye tres métodos para hacer esto.

Método DataBinder.Eval

Cuando el origen de datos funciona con datos que se devuelven desde una base de datos, el origen de datos puede contener numerosos elementos de información. Puede utilizar el método genérico DataBinder.Eval para devolver datos. En el siguiente ejemplo de código, el campo "au_id" se devuelve desde el origen de datos del objeto contenedor:
<%# DataBinder.Eval(Container.DataItem,"au_id") %>
				
Para obtener más información acerca del método DataBinder.Eval, consulte la siguiente documentación del SDK de .NET Framework:
Método DataBinder.Eval
http://msdn.microsoft.com/es-es/library/4hx47hfe.aspx

Conversión forzada explícita

Si necesita más control, utilice la conversión forzada explícita. Una conversión explícita utiliza una palabra clave de conversión de tipos. Estas palabras clave actúan como funciones, pero el compilador genera el código en línea. Por tanto, la ejecución es ligeramente más rápida que al utilizar una llamada a función. Los siguientes ejemplos de código utilizan la conversión forzada explícita:

Visual Basic .NET
' DataTable como DataSource
<%# CType(Container.DataItem, System.Data.DataRowView)("au_id") %>

' DataReader como DataSource
<%# CType(Container.DataItem, System.Data.Common.DbDataRecord)("au_id") %>

' DataReader como DataSource
<%# CType(Container.DataItem, System.Data.Common.DbDataRecord)(0) %>
				
Visual C# .NET
// DataTable como DataSource
<%# ((System.Data.DataRowView)Container.DataItem)["au_id"] %> 

// DataReader como DataSource
<%# ((System.Data.Common.DbDataRecord)Container.DataItem)["au_id"] %>

// DataReader como DataSource
<%# ((System.Data.Common.DbDataRecord)Container.DataItem)[0] %>
				
Visual J# .NET
// DataTable como DataSource
<%# ((System.Data.DataRowView)Container.DataItem)["au_id"] %> 

// DataReader como DataSource
<%# ((System.Data.Common.DbDataRecord)Container.DataItem)["au_id"] %>

// DataReader como DataSource
<%# ((System.Data.Common.DbDataRecord)Container.DataItem)[0] %>
				
Observe que los ejemplos anteriores utilizan DataTable, que es un subconjunto de DataSet o DataReader como origen de datos.

Evento ItemDataBound

También puede utilizar el evento ItemDataBound del control para enlazar los datos. Este evento se produce cuando un elemento está enlazado a datos en el control. El siguiente ejemplo de código HTML define un control Repeater control con una propiedad ItemTemplate:
<asp:repeater id=rptr runat=server>
   <itemtemplate>
      <asp:label id=lblAuthorID runat=server />
   </itemtemplate>
</asp:repeater>
				
Se requieren los métodos siguientes en la página:

Visual Basic .NET
public Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
  
   'TODO: Recuperar datos desde una base de datos,
   'y enlazar los datos a un control de lista.

End Sub

public Sub rptr_OnItemDataBound(ByVal sender As Object, _
ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles rptr.ItemDataBound
   Dim rec As DataRowView
   rec = e.Item.DataItem

   'Asegúrese de que tiene los datos.
   If Not IsDBNull(rec) Then
      Dim l1 As Label
      l1 = e.Item.FindControl("lblAuthorID")
      l1.Text = rec("au_id").ToString()
   End If
End Sub
				
Visual C# .NET
public void Page_Init(object sender, System.EventArgs e)
{
   rptr.ItemDataBound += new RepeaterItemEventHandler(rptr_OnItemDataBound);
}
public void Page_Load(object sender, System.EventArgs e)
{
   // TODO: Recuperar datos desde una base de datos,
   // y enlazar los datos a un control de lista.
}
public void rptr_OnItemDataBound(object sender, RepeaterItemEventArgs e)
{
   System.Data.Common.DbDataRecord rec = (System.Data.Common.DbDataRecord)
                                          e.Item.DataItem;
   if(rec!=null) //Asegúrese de que tiene los datos.
   {
      Label l1 = (Label)e.Item.FindControl("lblAuthorID");
      l1.Text = rec["au_id"].ToString();
   }
}
				
Visual J# .NET
public void Page_Init(Object sender, System.EventArgs e)
{
            rptr.add_ItemDataBound(new RepeaterItemEventHandler(rptr_OnItemDataBound));
}
private void Page_Load(Object sender, System.EventArgs e)
{
            // TODO: Recuperar datos desde una base de datos,
            // y enlazar los datos a un control de lista.
}
public void rptr_OnItemDataBound(Object sender, RepeaterItemEventArgs e)
{
            System.Data.Common.DbDataRecord rec = (System.Data.Common.DbDataRecord)
                                                   e.get_Item().get_DataItem();
            if (rec != null) //Asegúrese de que tiene los datos.
            {
                        Label l1 = (Label)e.get_Item().FindControl("lblAuthorID");
                        l1.set_Text(((rec.get_Item("au_id")).ToString()));
            }
}
				
Nota: es un artículo de "PUBLICACIÓN RÁPIDA" creado directamente por la organización de soporte técnico de Microsoft. La información aquí contenida se proporciona como está, como respuesta a problemas que han surgido. Como consecuencia de la rapidez con la que lo hemos puesto disponible, los materiales podrían incluir errores tipográficos y pueden ser revisados en cualquier momento sin previo aviso. Vea las Condiciones de uso para otras consideraciones

Propiedades

Id. de artículo: 307860 - Última revisión: viernes, 23 de agosto de 2013 - Versión: 2.0
La información de este artículo se refiere a:
  • Microsoft ASP.NET 1.0
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual J# .NET 2003 Standard Edition
  • Microsoft ASP.NET 1.1
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
Palabras clave: 
kbarttyperoadmap kbdatabinding kbinfo kbservercontrols KB307860

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com