Einzelnes Attribut | Kunde: <%# custID %> |
Abholaufträge | <asp:ListBox id="List1" datasource='<%# myArray %>' runat="server"> |
Ausdruck Kontakt | <%# ( customer.First + " " + customer.LastName ) %> |
Der Rückgabewert der Methode | Outstanding Balance: <%# GetBalance(custID) %> |
Obwohl die obige Syntax der praktischen Response.Write-Syntax von ASP (<%= %>) ähnelt, ist ihr Verhalten so. Aber es ist so definitiv anders. Die praktische ASP-Response.Write-Syntax berechnet den Wert während der Verarbeitung der Seite, während die ASP.NET-Datenbindungssyntax den Wert nur berechnet, wenn die DataBind-Methode aufgerufen wird.
DataBind ist eine Methode der Seite und aller Serversteuerelemente. Wenn Sie das DataBind des übergeordneten Steuerelements aufrufen, ruft es nacheinander die DataBind-Methode aller untergeordneten Steuerelemente auf. Beispielsweise ruft DataList1.DataBind() die DataBind-Methode aller Steuerelemente in der DataList-Vorlage auf. Der Aufruf der DataBind-Methode der Seite – Page.DataBind() oder einfach der Aufruf von DataBind() – führt zur Auswertung aller Datenbindungsausdrücke auf der Seite. Die DataBind-Methode wird normalerweise nur im Page_Load-Ereignis der Seite aufgerufen, wie im folgenden Beispiel gezeigt.
In jedem deklarativen Abschnitt einer ASPX-Seite können Sie die Bindungssyntax verwenden und den Datentyp angeben, den die Laufzeit für ihre Auswertung erwartet. Die einfachen Eigenschaften, Ausdrücke und Methoden in den obigen Beispielen zeigen dem Benutzer bei der Auswertung Textinhalte an. In diesem Fall ist der Wert des Datenbindungsausdrucks vom Typ String. Im obigen Sammlungsbeispiel ist der Werttyp der Datenbindungssyntax die DataSource-Eigenschaft der ListBox. Sie werden feststellen, dass eine Umwandlung des Werttyps im Bindungsausdruck erforderlich ist, um die gewünschten Ergebnisse zu erzielen. Wenn count beispielsweise eine ganze Zahl ist:
Anzahl der Datensätze: <%# count.ToString() %>
Die ASP.NET-Datenbindungssyntax unterstützt die Bindung öffentlicher Variablen, Seiteneigenschaften und Eigenschaften anderer Steuerelemente auf der Seite. Das folgende Beispiel zeigt, wie eine Bindung an öffentliche Variablen und einfache Eigenschaften der Seite vorgenommen wird. Bitte beachten Sie, dass diese Werte vor dem Aufruf von DataBind() initialisiert wurden.
<script language="VB" runat="server">
Sub Page_Load(Sender als Objekt, e als EventArgs)
Page.DataBind
End Sub
ReadOnly-Eigenschaft custID() als String
Erhalten
Rückgabe „ALFKI“
Beenden Sie Get
End-Eigenschaft
ReadOnly-Eigenschaft orderCount() As Integer
Erhalten
Rückkehr 11
Beenden Sie Get
End-Eigenschaft
</script>
<form action="DataBind1_vb.aspx" runat="server">
Kunde: <b><%# custID %></b><br />
Offene Bestellungen: <b><%# orderCount %></b>
</form>
Das folgende Beispiel zeigt, wie eine Bindung an eine Eigenschaft eines anderen Steuerelements vorgenommen wird:
<asp:DropDownList id="StateList" runat="server">
<asp:ListItem>CA</asp:ListItem>
…
</asp:DropDownList>
<asp:button ID="Button1" Text="Submit" OnClick="SubmitBtn_Click" runat="server"/>
Ausgewählter Status: <asp:label ID="Label1" text='<%# StateList.SelectedItem.Text %>' runat="server"/>
Serversteuerelemente vom Listentyp (z. B. DropDownList, ListBox und HTMLSelect) verwenden Sammlungen als Datenquellen. Das folgende Beispiel zeigt, wie eine Bindung an einen Common Language Runtime-Sammlungstyp vorgenommen wird. Diese Steuerelemente können nur an Sammlungen gebunden werden, die die Schnittstellen Ienumerable, Icollection oder IlistSource unterstützen. Häufiger kann es an ArrayList, Hashtable, DataView und DataReader gebunden werden. Das folgende Beispiel zeigt, wie eine Bindung an eine ArrayList durchgeführt wird.
Sub Page_Load(Sender als Objekt, e als EventArgs)
Wenn nicht, dann IsPostBack
Dimmwerte als ArrayList= new ArrayList()
Werte.Add("IN")
Werte.Add("KS")
Werte.Add("MD")
Werte.Add("MI")
Werte.Add ("ODER")
Werte.Add ("TN")
DropDown1.DataSource = Werte
DropDown1.DataBind
Ende wenn
End SubDas
folgende Beispiel zeigt, wie eine Bindung an eine DataView durchgeführt wird. Bitte beachten Sie, dass die DataView-Klasse im System.Data-Namespace definiert ist.
Sub Page_Load(Sender als Objekt, e als EventArgs)
Wenn nicht, dann IsPostBack
Dimmen Sie dt als Datentabelle
Dim dr As DataRow
Dim i As Integer
'Datentabelle erstellen
dt = Neue Datentabelle
dt.Columns.Add(New DataColumn("IntegerValue", GetType(Integer)))
dt.Columns.Add(New DataColumn("StringValue", GetType(String)))
dt.Columns.Add(New DataColumn("DateTimeValue", GetType(DateTime)))
dt.Columns.Add(New DataColumn("BooleanValue", GetType(Boolean)))
für i = 1 bis 9
aus
dr = dt.NewRow()
dr(0) = i
dr(1) = "Item " + i.ToString()
dr(2) = DateTime.Now.ToShortTimeString
Wenn (i Mod 2 <> 0) Dann
dr(3) = Wahr
Anders
dr(3) = Falsch
Ende wenn
'Datenzeilen zur Tabelle hinzufügen dt.Rows.Add(dr)
Nächste
GridView1.DataSource = New DataView(dt)
GridView1.DataBind()
Ende wenn
End Sub
Das folgende Beispiel zeigt, wie man eine Bindung an eine Hashtable durchführt.
Sub Page_Load(Sender als Objekt, e als EventArgs)
Wenn nicht, dann IsPostBack
Dim h As Hashtable = new Hashtable()
h.Add ("key1", "value1")
h.Add ("key2", "value2")
h.Add ("key3", "value3")
MyDataList.DataSource = h
MyDataList.DataBind
Ende wenn
End Sub
Oft möchten Sie möglicherweise Daten verarbeiten, bevor Sie sie an die Seite oder das Steuerelement binden. Das folgende Beispiel zeigt, wie eine Bindung an Ausdrücke und Methodenrückgabewerte vorgenommen wird.
Sub Page_Load(Sender als Objekt, e als EventArgs)
Wenn nicht, dann IsPostBack
Dim-Werte als ArrayList= new ArrayList()
-Werte.Add (0)
Werte.Hinzufügen (1)
Werte.Add (2)
Werte.Add(3)
Werte.Add(4)
Werte.Add(5)
Werte.Add (6)
DataList1.DataSource = Werte
DataList1.DataBind
Ende wenn
End Sub
Function EvenOrOdd(number As Integer) As String
Wenn (Anzahl Mod 2 <> 0) Dann
Rückgabe „Ungerade“
Anders
„Gerade“ zurückgeben
Ende wenn
Endfunktion
<asp:DataList id="DataList1" ……>
<ItemTemplate>
Zahlenwert: <%# Container.DataItem %>
Gerade/Ungerade: <%# EvenOrOdd(Container.DataItem) %>
</ItemTemplate>
</asp:DataList>
Die ASP.NET Page Framework-Komponente stellt eine statische Methode bereit, die einen spät gebundenen Datenbindungsausdruck auswertet und das Ergebnis optional als Zeichenfolge formatiert. In diesem Fall ist DataBinder.Eval praktisch, da dadurch ein Großteil der expliziten Konvertierungsarbeit entfällt, die der Entwickler durchführen muss, um die Schätzung in den gewünschten Datentyp zu konvertieren. Dies ist besonders nützlich, wenn eine Vorlagenliste datengebundene Steuerelemente enthält, da in diesem Fall normalerweise sowohl die Datenzeilen als auch die Datenfelder konvertiert werden müssen.
Schauen Sie sich das folgende Beispiel an, in dem eine Ganzzahl als Währungszeichenfolge angezeigt werden muss. In der standardmäßigen ASP.NET-Datenbindungssyntax müssen Sie zunächst den Typ der Datenzeile konvertieren, um das Datenfeld „IntegerValue“ abzurufen. Übergeben Sie es dann als Parameter an die String.Format-Methode.
<%# String.Format("{0:c}", (CType(Container.DataItem, DataRowView)("IntegerValue"))) %>
Diese Syntax ist sehr kompliziert und nicht leicht zu merken. Im Gegensatz dazu ist DataBinder.Eval eine einfache Methode mit nur drei Parametern: dem Benennungscontainer des Datenelements, dem Datenfeldnamen und der Formatzeichenfolge. In Vorlagensteuerelementen (z. B. FormView, GridView, DetailsView, DataList oder Repeater) ist der benannte Container Container.DataItem. Page ist ein weiterer benannter Container, der auch für DataBinder.Eval verwendet werden kann. Wie bereits erwähnt, bietet ASP.NET 2.0 eine neue vereinfachte Syntax (Eval) für DataBinder.Eval, die Sie in datengebundenen Steuerelementvorlagen verwenden können, um Container.DataItem automatisch zu analysieren.
<%# DataBinder.Eval(Container.DataItem, "IntegerValue", "{0:c}") %>
<%# Eval("IntegerValue", "{0:c}") %>
Der Formatzeichenfolgenparameter ist optional. Wenn dieser Parameter weggelassen wird, gibt DataBinder.Eval einen Objekttypwert zurück, wie unten gezeigt:
<%# CType(DataBinder.Eval(Container.DataItem, "BoolValue"), Boolean) %> Darauf
sollten wir achten Im Vergleich zur Standard-Datenbindungssyntax wirkt sich DataBinder.Eval erheblich auf die Leistung aus, da es die verzögerte Bindungsreflexion verwendet. Bitte verwenden Sie DataBinder.Eval mit Bedacht, insbesondere wenn Sie die Zeichenfolge nicht formatieren müssen.