Binden an Daten mit einem Datenquellensteuerelement

Aktualisiert: November 2007

Datenquellensteuerelemente stellen eine umfassende Erweiterung der Fähigkeiten datengebundener Steuerelemente dar, z. B. GridView, FormView und DetailsView. Die Kombination von Datenquellensteuerelementen mit datengebundenen Steuerelementen ermöglicht das Abrufen, Ändern, Aufteilen in Seiten, Sortieren und Filtern von Daten aus verschiedenen Datenquellen mit wenig oder ohne Code.

Binden mithilfe der DataSourceID-Eigenschaft

Sie können in datengebundenen Steuerelementen mit Daten arbeiten, indem Sie das datengebundene Steuerelement an ein Datenquellensteuerelement binden, z. B. an das LinqDataSource-Steuerelement, das ObjectDataSource-Steuerelement oder das SqlDataSource-Steuerelement. Das Datenquellensteuerelement stellt eine Verbindung zu einer Datenquelle, z. B. einer Datenbank, einer Entitätsklasse oder einem Objekt der mittleren Ebene, her und ruft Daten ab oder aktualisiert diese. Das datengebundene Steuerelement kann diese Daten dann verwenden. Um die Datenbindung herzustellen, legen Sie die DataSourceID-Eigenschaft des datengebundenen Steuerelements so fest, dass sie auf ein Datenquellensteuerelement verweist. Wenn ein datengebundenes Steuerelement an ein Datenquellensteuerelement gebunden ist, wird für Datenoperationen wenig oder gar kein zusätzlicher Code benötigt. Das datengebundene Steuerelement kann die vom Datenquellensteuerelement bereitgestellten Datendienste automatisch nutzen.

Hinweis:

In früheren Versionen von ASP.NET wurden datengebundene Steuerelemente durch die DataSource-Eigenschaft an Daten gebunden. Dafür war es erforderlich, Code für Operationen wie das Anzeigen, Paging, Sortieren, Bearbeiten und Löschen von Daten zu schreiben. Obwohl die Datenbindung von Steuerelementen mithilfe der DataSource-Eigenschaft hergestellt und vorhandener Code verwendet werden kann, ist die Datenbindung auch mithilfe der DataSourceID-Eigenschaft möglich. Im Allgemeinen steht bei Verwendung der DataSourceID-Eigenschaft eine größere Zahl automatischer Funktionen zur Verfügung als bei Verwendung der DataSource-Eigenschaft.

Im folgenden Beispiel wird ein FormView-Steuerelement gezeigt, das zum Anzeigen von Daten aus einer Datenbank an ein LinqDataSource-Steuerelement gebunden ist. Damit das Beispiel funktionieren kann, müssen Sie Klassen erstellen, die die Datenbank und die Tabelle darstellen. Sie können diese Klassen mit dem O/R-Designer erstellen. Weitere Informationen finden Sie unter Object Relational Designer (O/R-Designer).

<%@ Page language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
  <head >
    <title>FormView Example</title>
</head>
<body>
    <form id="form1" >
      <h3>FormView Example</h3>
        <table cellspacing="10"> 
          <tr>               
            <td valign="top">

              <asp:FormView ID="ProductsFormView"
                DataSourceID="LinqDataSource1"
                AllowPaging="true"
                >

                <HeaderStyle forecolor="white" backcolor="Blue" />                

                <ItemTemplate>
                  <table>
                    <tr>
                      <td align="right"><b>Product ID:</b></td>
                      <td><asp:Label id="ProductIDLabel"  Text='<%# Eval("ProductID") %>' /></td>
                    </tr>
                    <tr>
                      <td align="right"><b>Product Name:</b></td>
                      <td><asp:Label id="ProductNameLabel"  Text='<%# Eval("ProductName") %>' /></td>
                    </tr>
                    <tr>
                      <td align="right"><b>Category ID:</b></td>
                      <td><asp:Label id="CategoryIDLabel"  Text='<%# Eval("CategoryID") %>' /></td>
                    </tr>
                    <tr>
                      <td align="right"><b>Quantity Per Unit:</b></td>
                      <td><asp:Label id="QuantityPerUnitLabel"  Text='<%# Eval("QuantityPerUnit") %>' /></td>
                    </tr>
                    <tr>
                      <td align="right"><b>Unit Price:</b></td>
                      <td><asp:Label id="UnitPriceLabel"  Text='<%# Eval("UnitPrice") %>' /></td>
                    </tr>
                  </table>                 
                </ItemTemplate>

                <PagerTemplate>
                  <table>
                    <tr>
                      <td><asp:LinkButton ID="FirstButton" CommandName="Page" CommandArgument="First" Text="<<" RunAt="server"/></td>
                      <td><asp:LinkButton ID="PrevButton"  CommandName="Page" CommandArgument="Prev"  Text="<"  RunAt="server"/></td>
                      <td><asp:LinkButton ID="NextButton"  CommandName="Page" CommandArgument="Next"  Text=">"  RunAt="server"/></td>
                      <td><asp:LinkButton ID="LastButton"  CommandName="Page" CommandArgument="Last"  Text=">>" RunAt="server"/></td>
                    </tr>
                  </table>
                </PagerTemplate>

              </asp:FormView>

            </td>
          </tr>
        </table>

        <asp:LinqDataSource 
            ContextTypeName="NorthwindDataContext" 
            TableName="Products"
            ID="LinqDataSource1"  
            >
        </asp:LinqDataSource>

      </form>
  </body>
</html>
<%@ Page language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
  <head >
    <title>FormView Example</title>
</head>
<body>
    <form id="form1" >
      <h3>FormView Example</h3>
        <table cellspacing="10"> 
          <tr>               
            <td valign="top">

              <asp:FormView ID="ProductsFormView"
                DataSourceID="LinqDataSource1"
                AllowPaging="true"
                >

                <HeaderStyle forecolor="white" backcolor="Blue" />                

                <ItemTemplate>
                  <table>
                    <tr>
                      <td align="right"><b>Product ID:</b></td>
                      <td><asp:Label id="ProductIDLabel"  Text='<%# Eval("ProductID") %>' /></td>
                    </tr>
                    <tr>
                      <td align="right"><b>Product Name:</b></td>
                      <td><asp:Label id="ProductNameLabel"  Text='<%# Eval("ProductName") %>' /></td>
                    </tr>
                    <tr>
                      <td align="right"><b>Category ID:</b></td>
                      <td><asp:Label id="CategoryIDLabel"  Text='<%# Eval("CategoryID") %>' /></td>
                    </tr>
                    <tr>
                      <td align="right"><b>Quantity Per Unit:</b></td>
                      <td><asp:Label id="QuantityPerUnitLabel"  Text='<%# Eval("QuantityPerUnit") %>' /></td>
                    </tr>
                    <tr>
                      <td align="right"><b>Unit Price:</b></td>
                      <td><asp:Label id="UnitPriceLabel"  Text='<%# Eval("UnitPrice") %>' /></td>
                    </tr>
                  </table>                 
                </ItemTemplate>

                <PagerTemplate>
                  <table>
                    <tr>
                      <td><asp:LinkButton ID="FirstButton" CommandName="Page" CommandArgument="First" Text="<<" RunAt="server"/></td>
                      <td><asp:LinkButton ID="PrevButton"  CommandName="Page" CommandArgument="Prev"  Text="<"  RunAt="server"/></td>
                      <td><asp:LinkButton ID="NextButton"  CommandName="Page" CommandArgument="Next"  Text=">"  RunAt="server"/></td>
                      <td><asp:LinkButton ID="LastButton"  CommandName="Page" CommandArgument="Last"  Text=">>" RunAt="server"/></td>
                    </tr>
                  </table>
                </PagerTemplate>

              </asp:FormView>

            </td>
          </tr>
        </table>

        <asp:LinqDataSource 
            ContextTypeName="NorthwindDataContext" 
            TableName="Products"
            ID="LinqDataSource1"  
            >
        </asp:LinqDataSource>

      </form>
  </body>
</html>

Weitere Informationen zu Datenquellensteuerelementen finden Sie unter Datengebundene Webserversteuerelemente.

Auswählen von Daten

Die Art und Weise, wie ein Datenquellensteuerelement Daten abruft, wird durch das Steuerelement selbst bestimmt. Das ObjectDataSource-Steuerelement liest Daten, indem es die in der SelectMethod-Eigenschaft angegebene Methode aufruft. Im folgenden Beispiel wird ein ObjectDataSource-Steuerelement gezeigt, das mithilfe der GetAllEmployees-Methode der EmployeeLogic-Klasse Daten zurückgibt.

<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.VB" Assembly="Samples.AspNet.VB" %>
<%@ Page language="vb" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
  <head>
    <title>ObjectDataSource - Visual Basic Example</title>
  </head>
  <body>
    <form id="Form1" method="post" >

        <asp:gridview
          id="GridView1"
          
          datasourceid="ObjectDataSource1" />

        <asp:objectdatasource
          id="ObjectDataSource1"
          
          selectmethod="GetAllEmployees"
          typename="Samples.AspNet.VB.EmployeeLogic" />

    </form>
  </body>
</html>
<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.CS" Assembly="Samples.AspNet.CS" %>
<%@ Page language="c#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
  <head>
    <title>ObjectDataSource - C# Example</title>
  </head>
  <body>
    <form id="Form1" method="post" >

        <asp:gridview
          id="GridView1"
          
          datasourceid="ObjectDataSource1" />

        <asp:objectdatasource
          id="ObjectDataSource1"
          
          selectmethod="GetAllEmployees"
          typename="Samples.AspNet.CS.EmployeeLogic" />

    </form>
  </body>
</html>
<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.JSL" Assembly="Samples.AspNet.JSL" %>
<%@ Page language="VJ#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
  <head>
    <title>ObjectDataSource - VJ# Example</title>
  </head>
  <body>
    <form id="Form1" method="post" >

        <asp:gridview
          id="GridView1"
          
          datasourceid="ObjectDataSource1" />

        <asp:objectdatasource
          id="ObjectDataSource1"
          
          selectmethod="GetAllEmployees"
          typename="Samples.AspNet.JSL.EmployeeLogic" />

    </form>
  </body>
</html>

Weitere Informationen finden Sie unter Übersicht über das ObjectDataSource-Webserversteuerelement.

Das SqlDataSource-Steuerelement und das AccessDataSource-Steuerelement wählen Daten aus, indem sie die in der SelectCommand-Eigenschaft angegebene SQL-Abfrage ausführen. Im folgenden Beispiel wird ein SqlDataSource-Steuerelement gezeigt, das Daten aus der Tabelle Employees der Beispieldatenbank Northwind zurückgibt:

<%@ Page language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
  <head >
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="form1" >
      <asp:SqlDataSource
          id="SqlDataSource1"
          
          DataSourceMode="DataReader"
          ConnectionString="<%$ ConnectionStrings:MyNorthwind%>"
          SelectCommand="SELECT LastName FROM Employees">
      </asp:SqlDataSource>

      <asp:ListBox
          id="ListBox1"
          
          DataTextField="LastName"
          DataSourceID="SqlDataSource1">
      </asp:ListBox>

    </form>
  </body>
</html>
<%@ Page language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
  <head >
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="form1" >
      <asp:SqlDataSource
          id="SqlDataSource1"
          
          DataSourceMode="DataReader"
          ConnectionString="<%$ ConnectionStrings:MyNorthwind%>"
          SelectCommand="SELECT LastName FROM Employees">
      </asp:SqlDataSource>

      <asp:ListBox
          id="ListBox1"
          
          DataTextField="LastName"
          DataSourceID="SqlDataSource1">
      </asp:ListBox>

    </form>
  </body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
  <head >
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="form1" >
      <asp:SqlDataSource
          id="SqlDataSource1"
          
          DataSourceMode="DataReader"
          ConnectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;"
          SelectCommand="SELECT LastName FROM Employees">
      </asp:SqlDataSource>

      <asp:ListBox
          id="ListBox1"
          
          DataTextField="LastName"
          DataSourceID="SqlDataSource1">
      </asp:ListBox>

    </form>
  </body>
</html>

Weitere Informationen finden Sie unter Auswählen von Daten mithilfe des SqlDataSource-Steuerelements.

Wenn Sie das LinqDataSource-Steuerelement verwenden und seine Select-Eigenschaft nicht festlegen, werden vom Steuerelement Daten für alle Eigenschaften der Datenklasse zurückgegeben. Durch Festlegen der Select-Eigenschaft können Sie eine Teilmenge von Eigenschaften angeben oder neue Werte berechnen. Im folgenden Beispiel wird gezeigt, wie ein LinqDataSource-Steuerelement drei Eigenschaften von einer Datenquelle, die zusätzliche Eigenschaften enthält, zurückgibt.

<asp:LinqDataSource 
    ContextTypeName="ExampleDataContext" 
    TableName="Products" 
    Select="new(Name, Category, Price)"
    ID="LinqDataSource1" 
    >
</asp:LinqDataSource>
<asp:GridView 
    DataSourceID="LinqDataSource1"
    ID="GridView1" 
    >
</asp:GridView>
<asp:LinqDataSource 
    ContextTypeName="ExampleDataContext" 
    TableName="Products" 
    Select="new(Name, Category, Price)"
    ID="LinqDataSource1" 
    >
</asp:LinqDataSource>
<asp:GridView 
    DataSourceID="LinqDataSource1"
    ID="GridView1" 
    >
</asp:GridView>

XmlDataSource kann nicht verwendet werden, um bestimmte Elemente aus den XML-Quelldaten auszuwählen. Sie können jedoch mithilfe der XPath-Eigenschaft einen Filter angeben. Weitere Informationen finden Sie unter Filtern von Daten mit dem XmlDataSource-Steuerelement.

Ändern von Daten

Die Steuerelemente LinqDataSource, ObjectDataSource und SqlDataSource können so konfiguriert werden, dass Benutzer Daten ändern können. Weitere Informationen finden Sie unter Ändern von Daten mit Datenquellensteuerelementen.

Siehe auch

Weitere Ressourcen

Datengebundene Webserversteuerelemente