de atributo único | : <%# custID %> |
Órdenes de recolección | <asp:ListBox id="List1" datasource='<%# myArray %>' runat="server"> |
Contacto de expresión | <%# ( cliente.FirstName + " " + customer.LastName ) %> |
El valor de retorno del método | Saldo pendiente: <%# GetBalance(custID) %> |
Aunque la sintaxis anterior parece similar a la sintaxis de conveniencia Response.Write de ASP (<%= %>), su comportamiento es Pero es Definitivamente diferente. La sintaxis de conveniencia ASP Response.Write calcula el valor mientras se procesa la página, mientras que la sintaxis de enlace de datos ASP.NET solo calcula el valor cuando se llama al método DataBind.
DataBind es un método de la página y de todos los controles del servidor. Cuando llama al DataBind del control principal, llamará al método DataBind de todos los controles secundarios por turno. Por ejemplo, DataList1.DataBind() llamará al método DataBind de todos los controles en la plantilla DataList. Llamar al método DataBind de la página (Page.DataBind() o simplemente llamar a DataBind()) provoca la evaluación de todas las expresiones de enlace de datos en la página. Por lo general, el método DataBind solo se llama en el evento Page_Load de la página, como se muestra en el siguiente ejemplo.
En cualquier sección declarativa de una página .aspx, puede utilizar la sintaxis de enlace y especificar el tipo de datos esperado por el tiempo de ejecución para su evaluación. Las propiedades, expresiones y métodos simples de los ejemplos anteriores muestran contenido de texto al usuario cuando se evalúan. En este caso, el valor de la expresión de enlace de datos es de tipo Cadena. En el ejemplo de colección anterior, el tipo de valor de la sintaxis de enlace de datos es la propiedad DataSource de ListBox. Descubrirá que es necesario convertir el tipo de valor en la expresión vinculante para producir los resultados deseados. Por ejemplo, si el recuento es un número entero:
Número de registros: <%# count.ToString() %>
La sintaxis de enlace de datos de ASP.NET admite el enlace de variables públicas, propiedades de página y propiedades de otros controles de la página. El siguiente ejemplo demuestra cómo vincularse a variables públicas y propiedades simples de la página. Tenga en cuenta que estos valores se han inicializado antes de llamar a DataBind().
<lenguaje de escritura="VB" runat="servidor">
Sub Page_Load (remitente como objeto, e como EventArgs)
Página.DataBind
Fin de la propiedad Sub
ReadOnly custID() como cadena
Conseguir
Volver "ALFKI"
Fin de obtención
Propiedad final
Propiedad de sólo lectura orderCount() como número entero
Conseguir
Regresar 11
Fin de obtención
Propiedad final
</guión>
<formulario acción="DataBind1_vb.aspx" runat="servidor">
Cliente: <b><%# custID %></b><br />
Órdenes abiertas: <b><%# orderCount %></b>
</form>
El siguiente ejemplo demuestra cómo vincularse a una propiedad de otro control:
<asp:DropDownList id="StateList" runat="server">
<asp:ListItem>CA</asp:ListItem>
…
</asp:DropDownList>
<asp:button ID="Botón1" Text="Enviar" OnClick="SubmitBtn_Click" runat="servidor"/>
Estado seleccionado: <asp:label ID="Label1" text='<%# StateList.SelectedItem.Text %>' runat="server"/>
Los controles de servidor de tipo lista (como DropDownList, ListBox y HTMLSelect) utilizan colecciones como fuentes de datos. El siguiente ejemplo demuestra cómo vincularse a un tipo de colección de Common Language Runtime. Estos controles solo se pueden vincular a colecciones que admitan las interfaces Ienumerable, Icollection o IlistSource. Más comúnmente, puede vincularse a ArrayList, Hashtable, DataView y DataReader. El siguiente ejemplo demuestra cómo vincularse a una ArrayList.
Sub Page_Load (remitente como objeto, e como EventArgs)
Si no es, publicar en aquel entonces
Valores atenuados como ArrayList= new ArrayList()
valores.Agregar("EN")
valores.Añadir("KS")
valores.Agregar("MD")
valores.Agregar("MI")
valores.Agregar ("O")
valores.Agregar ("TN")
DropDown1.DataSource = valores
DropDown1.Enlace de datos
Terminar si
End SubEl
siguiente ejemplo demuestra cómo vincularse a un DataView. Tenga en cuenta que la clase DataView está definida en el espacio de nombres System.Data.
Sub Page_Load (remitente como objeto, e como EventArgs)
Si no es, publicar en aquel entonces
Dim dt como tabla de datos
Dim dr como DataRow
Dim i como entero
'Crear tabla de datos
dt = Nueva tabla de datos
dt.Columns.Add(Nueva columna de datos ("IntegerValue", GetType(Integer)))
dt.Columns.Add(Nueva columna de datos("StringValue", GetType(String)))
dt.Columns.Add(New DataColumn("DateTimeValue", GetType(DateTime)))
dt.Columns.Add(New DataColumn("BooleanValue", GetType(Boolean)))
'Complete algunos datos
para i = 1 a 9
dr = dt.NuevaFila()
dr(0) = yo
dr(1) = "Artículo" + i.ToString()
dr(2) = FechaHora.Ahora.ToShortTimeString
Si (i Mod 2 <> 0) Entonces
dr(3) = Verdadero
Demás
dr(3) = Falso
Terminar si
'Agregar filas de datos a la tabla dt.Rows.Add(dr)
Siguiente
GridView1.DataSource = Nuevo DataView(dt)
GridView1.DataBind()
Terminar si
End Sub
El siguiente ejemplo demuestra cómo vincularse a una Hashtable.
Sub Page_Load (remitente como objeto, e como EventArgs)
Si no es, publicar en aquel entonces
Dim h As Hashtable = nueva Hashtable()
h.Agregar ("clave1", "valor1")
h.Agregar ("clave2", "valor2")
h.Add ("clave3", "valor3")
MyDataList.DataSource = h
MyDataList.DataBind
Terminar si
End Sub
A menudo, es posible que desee procesar datos antes de vincularlos a la página o al control. El siguiente ejemplo demuestra cómo vincularse a expresiones y valores de retorno de métodos.
Sub Page_Load (remitente como objeto, e como EventArgs)
Si no es, publicar en aquel entonces
Valores atenuados como ArrayList= nuevos
valores de ArrayList().Agregar (0)
valores.Añadir (1)
valores.Agregar (2)
valores.Añadir(3)
valores.Add(4)
valores.Add(5)
valores.Agregar (6)
DataList1.DataSource = valores
Lista de datos1.Enlace de datos
Terminar si
Fin de
la subfunción EvenOrOdd (número como entero) como cadena
Si (número Mod 2 <> 0) Entonces
Devolver "impar"
Demás
Devolver "Par"
Terminar si
Función final
<asp:DataList id="DataList1" ……>
<Plantilla de artículo>
Valor numérico: <%# Container.DataItem %>
Par/Impar: <%# ParOrImpar(Container.DataItem) %>
</Plantilla de elemento>
</asp:ListaDatos>
El componente ASP.NET Page Framework proporciona un método estático que evalúa una expresión de enlace de datos de enlace tardío y, opcionalmente, formatea el resultado como una cadena. En este caso, DataBinder.Eval es conveniente porque elimina gran parte del trabajo de conversión explícito que el desarrollador debe realizar para convertir la estimación al tipo de datos deseado. Es particularmente útil cuando hay controles vinculados a datos en una lista con plantilla, porque en ese caso normalmente se deben convertir tanto las filas de datos como los campos de datos.
Mire el siguiente ejemplo, que debe mostrar un número entero como una cadena de moneda. En la sintaxis de enlace de datos estándar de ASP.NET, primero debe convertir el tipo de fila de datos para recuperar el campo de datos IntegerValue. Luego páselo como parámetro al método String.Format.
<%# String.Format("{0:c}", (CType(Container.DataItem, DataRowView)("IntegerValue"))) %>
Esta sintaxis es muy complicada y no es fácil de recordar. Por el contrario, DataBinder.Eval es un método simple con solo tres parámetros: el contenedor de nombres del elemento de datos, el nombre del campo de datos y la cadena de formato. En los controles con plantilla (como FormView, GridView, DetallesView, DataList o Repetidor), el contenedor con nombre es Container.DataItem. Page es otro contenedor con nombre que también se puede utilizar para DataBinder.Eval. Como mencionamos anteriormente, ASP.NET 2.0 proporciona una nueva sintaxis simplificada (Eval) para DataBinder.Eval, que puede usar en plantillas de control enlazadas a datos para analizar automáticamente Container.DataItem.
<%# DataBinder.Eval(Container.DataItem, "IntegerValue", "{0:c}") %>
<%# Eval("IntegerValue", "{0:c}") %>
El parámetro de cadena de formato es opcional. Si se omite este parámetro, DataBinder.Eval devolverá un valor de tipo Objeto, como se muestra a continuación:
<%# CType(DataBinder.Eval(Container.DataItem, "BoolValue"), Boolean) %> A lo que
debemos prestar atención es a que , Con la sintaxis estándar de enlace de datos, DataBinder.Eval afectará significativamente el rendimiento porque utiliza reflexión de enlace diferido. Utilice DataBinder.Eval con prudencia, especialmente si no necesita formatear la cadena.