Übersicht über Datenbindungsausdrücke

Aktualisiert: November 2007

Mithilfe der Datenbindungssyntax können Sie Eigenschaftenwerte von Steuerelementen an Daten binden und Werte für das Abrufen, Aktualisieren, Löschen und das Einfügen von Daten festlegen.

Datenbindungssyntax

Datenbindungsausdrücke werden durch das <%#-Trennzeichen und das %>-Trennzeichen eingeschlossen und verwenden die Eval-Funktion und die Bind-Funktion. Die Eval-Funktion wird zur Definition der unidirektionalen (schreibgeschützten) Bindung verwendet. Die Bind-Funktion wird für bidirektionale (aktualisierbare) Bindung verwendet. Zusätzlich zum Aufruf der Eval-Methode und der Bind-Methode zum Ausführen der Datenbindung in einem Datenbindungsausdruck können Sie sämtlichen öffentlichen Code innerhalb des <%#-Trennzeichens und des %>-Trennzeichens aufrufen, um diesen Code während der Verarbeitung der Seite auszuführen und einen Wert zurückzugeben.

Datenbindungsausdrücke werden aufgelöst, wenn die DataBind -Methode eines Steuerelements oder der Page-Klasse aufgerufen wird. Bei Steuerelementen, z. B. GridView, DetailsView und FormView, werden Datenbindungsausdrücke automatisch während des PreRender -Ereignisses des Steuerelements aufgelöst, sodass Sie die DataBind-Methode nicht explizit aufrufen müssen.

Das folgende Codebeispiel veranschaulicht die Verwendung von Datenbindungsausdrücken bei einem FormView-Steuerelement in einer 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>

Verwenden der Eval-Methode

Die Eval-Methode wertet spät gebundene Datenausdrücke aus, die in den Vorlagen für datengebundene Steuerelemente wie GridView, DetailsView und FormView enthalten sind. Zur Laufzeit ruft die Eval-Methode die Eval-Methode des DataBinder-Objekts auf, das auf das aktuelle Datenelement des Benennungscontainers verweist. Der Benennungscontainer ist im Allgemeinen der kleinste Teil des datengebundenen Steuerelements, das einen gesamten Datensatz enthält, z. B. eine Zeile in einem GridView-Steuerelement. Deshalb können Sie die Eval-Methode nur in Vorlagen für ein datengebundenes Steuerelement zur Bindung verwenden.

Die Eval-Methode übernimmt den Namen eines Datenfelds und gibt eine Zeichenfolge zurück, die den Wert dieses Felds im aktuellen Datensatz der Datenquelle enthält. Optional können Sie einen zweiten Parameter angeben, um ein Format für die zurückgegebene Zeichenfolge festzulegen. Der Formatierungsparameter für die Zeichenfolge verwendet die für die Format-Methode der String-Klasse definierte Syntax.

Verwenden der Bind-Methode

Die Bind-Methode ähnelt der Eval-Methode, es gibt jedoch einige bedeutende Unterschiede. Obwohl Sie zum Abrufen der Werte datengebundener Felder sowohl die Bind-Methode als auch die Eval-Methode verwenden können, kann die Bind-Methode auch dann verwendet werden, wenn Daten geändert werden können.

In ASP.NET können datengebundene Steuerelemente, z. B. GridView, DetailsView und FormView, automatisch die Aktualisierungs-, Lösch- und Einfügeoperationen des Datenquellensteuerelements verwenden. Wenn Sie zum Beispiel für das Datenquellensteuerelement die SQL-Anweisungen Select, Insert, Delete und Update definiert haben und Bind in einer der Steuerelementvorlagen GridView, DetailsView und FormView verwenden, kann das Steuerelement die Werte aus untergeordneten Steuerelementen in der Vorlage extrahieren und an das Datenquellensteuerelement übergeben. Das Datenquellensteuerelement führt dann den entsprechenden Befehl für die Datenbank aus. Aus diesem Grund wird die Bind-Funktion in der EditItemTemplate und in der InsertItemTemplate eines datengebundenen Steuerelements verwendet.

Die Bind-Methode wird typischerweise mit Eingabesteuerelementen, z. B. dem TextBox-Steuerelement, verwendet, das von einer GridView-Zeile im Bearbeitungsmodus dargestellt wird. Wenn das datengebundene Steuerelement diese Eingabesteuerelemente als Teil seiner eigenen Darstellung erstellt, kann es die Eingabewerte extrahieren.

Die Bind-Methode übernimmt den Namen des Datenfelds, das mit der gebundenen Eigenschaft verknüpft werden soll, wie im folgenden Beispiel gezeigt:

Sicherheitshinweis:

In diesem Beispiel ist ein Textfeld enthalten, das eine Benutzereingabe akzeptiert. Dies stellt ein potenzielles Sicherheitsrisiko dar. Standardmäßig stellt die ASP.NET-Seite sicher, dass die Benutzereingabe keine Skript- oder HTML-Elemente enthält. Weitere Informationen finden Sie unter Übersicht über Skriptangriffe.

<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>

Beim Klicken auf die Update-Schaltfläche für die Zeile werden die Werte aller Steuerelementeigenschaften unter Verwendung der Bind-Syntax extrahiert und zum Ausführen der Aktualisierungsoperation an das Datenquellensteuerelement übergeben.

Explizites Aufrufen der DataBind-Methode

Steuerelemente wie GridView, FormView und DetailsView führen die Bindung aus, indem sie implizit die DataBind-Methode aufrufen, wenn sie mithilfe der DataSourceID-Eigenschaft an Daten gebunden werden. Es gibt jedoch Situationen, in denen Sie die DataBind-Methode explizit aufrufen müssen.

Dies ist zum Beispiel der Fall, wenn Sie ein Steuerelement an ein Datenquellensteuerelement gebunden haben und dabei anstelle der DataSourceID-Eigenschaft die DataSource-Eigenschaft verwendet haben. In diesem Fall müssen Sie die DataBind-Methode explizit aufrufen, um die Datenbindung auszuführen und die Datenbindungsausdrücke aufzulösen.

Eine weitere derartige Situation liegt vor, wenn die Aktualisierung der Daten in einem datengebundenen Steuerelement manuell ausgeführt werden muss. Angenommen, eine Seite enthält zwei Steuerelemente, die Informationen aus derselben Datenbank anzeigen und dabei zum Beispiel verschiedene Ansichten verwenden. In diesem Fall müssen Sie möglicherweise die Bindung des Steuerelements an die Daten explizit erneut herstellen, um die Datenanzeige konsistent zu halten. So könnten zum Beispiel ein GridView-Steuerelement, das zur Anzeige einer Produktliste dient, und ein DetailsView-Steuerelement vorhanden sein, mit dem Benutzer einzelne Produkte bearbeiten können. Obwohl das GridView-Steuerelement und das DetailsView-Steuerelement in diesem Fall Daten aus derselben Quelle anzeigen, sind sie an verschiedene Datenquellensteuerelemente gebunden, da sie zum Abruf von Daten verschiedene Abfragen verwenden. Ein Benutzer könnte mithilfe des DetailsView-Steuerelements einen Datensatz aktualisieren, was bewirken würde, dass das zugehörige Datenquellensteuerelement die Aktualisierung ausführt. Da jedoch das GridView-Steuerelement an ein anderes Datenquellensteuerelement gebunden ist, zeigt es die alten Werte des Datensatzes an, bis die Seite aktualisiert wird. Deshalb können Sie nach der Aktualisierung der Daten durch das DetailsView-Steuerelement die DataBind-Methode aufrufen. Dies führt dazu, dass das GridView-Steuerelement erneut alle Datenbindungsausdrücke sowie allen öffentlichen Code innerhalb des <%#-Trennzeichens und des %>-Trennzeichens ausführt, um die Ansicht zu aktualisieren. Im Ergebnis spiegelt das GridView-Steuerelement die Aktualisierung wider, die das DetailsView-Steuerelement vorgenommen hat.

Verwenden der Bindung für eine Nachschlagetabelle

Bei datengebundenen Steuerelementen haben Benutzer häufig die Möglichkeit, einen Wert zu aktualisieren oder einzufügen, indem sie diesen mithilfe des DropDownList-Steuerelements oder eines anderen Listensteuerelements in einer Nachschlagetabelle auswählen. In diesem Fall ist das Nachschlagesteuerelement an eine separate Datenquelle gebunden, die eine Liste möglicher Werte zurückgibt. Der ausgewählte Wert des Nachschlagesteuerelements ist an ein Feld in der übergeordneten datengebundenen Zeile gebunden.

Mit folgenden Schritten können Sie diese Funktion hinzufügen. Fügen Sie zuerst für das Nachschlagesteuerelement ein Listensteuerelement (ein DropDownList- oder ein ListBox-Steuerelement) zu einer Vorlage in einem datengebundenen Steuerelement hinzu. Dieses datengebundene Steuerelement kann z. B. ein GridView-, DetailsView- oder FormView-Steuerelement sein. Binden Sie die SelectedValue-Eigenschaft des Nachschlagesteuerelements an das verknüpfte Feld in der Datenquelle des Containersteuerelements. Legen Sie dann für die DataSourceID-Eigenschaft des Nachschlagesteuerelements ein Datenquellensteuerelement fest, das die Nachschlagewerte abruft. Legen Sie für die DataTextField-Eigenschaft des Nachschlagesteuerelements das Feld in der Nachschlagetabelle fest, in der die anzuzeigenden Werte enthalten sind. Legen Sie, sofern erforderlich, für die DataValueField-Eigenschaft das Feld in der Nachschlagetabelle fest, in der der eindeutige Bezeichner des Nachschlagewerts enthalten ist.

Im folgenden Beispiel ist ein DropDownList-Steuerelement dargestellt, das in der InsertItemTemplate-Vorlage eines FormView-Steuerelements enthalten ist (dies kann auch eine InsertItemTemplate-Vorlage eines TemplateField sein, das in der Fields-Eigenschaft eines DetailsView-Steuerelements oder der Columns-Eigenschaft eines GridView-Steuerelements enthalten ist). Die SelectedValue-Eigenschaft des DropDownList-Steuerelements verwendet die Bind-Methode für bidirektionale Bindungen an das Feld CategoryID der aktuellen Zeile des FormView-Steuerelements. Die DataSourceID-Eigenschaft des DropDownList-Steuerelements wird auf ein separates Datenquellensteuerelement festgelegt, das die Liste möglicher Kategorienamen und -IDs abruft. Die DataTextField-Eigenschaft des DropDownList-Steuerelements wird auf das Feld CategoryName der Nachschlagedatenquelle festgelegt, sodass eine Liste möglicher Kategorienamen angezeigt wird. Die DataValueField-Eigenschaft des DropDownList-Steuerelements wird auf das Feld CategoryID der Nachschlagedatenquelle für den verknüpften Kategorienamen festgelegt. Wenn ein Benutzer einen Kategorienamen in der Liste auswählt, wird die SelectedValue-Eigenschaft des DropDownList-Steuerelements auf die Kategorie-ID des ausgewählten Kategorienamens festgelegt.

<tr>
  <td align="right"><b>Category:</b></td>
  <td><asp:DropDownList ID="InsertCategoryDropDownList" 
                        SelectedValue='<%# Bind("CategoryID") %>' 
                        DataSourceID="CategoriesDataSource"
                        DataTextField="CategoryName"
                        DataValueField="CategoryID"
                        RunAt="Server" />
  </td>
</tr>
<tr>
  <td align="right"><b>Category:</b></td>
  <td><asp:DropDownList ID="InsertCategoryDropDownList" 
                        SelectedValue='<%# Bind("CategoryID") %>' 
                        DataSourceID="CategoriesDataSource"
                        DataTextField="CategoryName"
                        DataValueField="CategoryID"
                        RunAt="Server" />
  </td>
</tr>

Das gleiche Listensteuerelement kann auch in einer Bearbeitungsvorlage für Elemente verwendet werden.

Siehe auch

Aufgaben

Gewusst wie: Binden an Daten in einem vorlagenbasierten Steuerelement

Konzepte

Binden an Datenbanken

Binden an Geschäftsobjekte

Binden an hierarchische Daten

Überblick über den ASP.NET-Datenzugriff