Freigeben über


Gewusst wie: Verwenden von ASP.NET Dynamic Data in vorlagenbasierten datengebundenen Steuerelementen

Aktualisiert: November 2007

Sie können ASP.NET Dynamic Data in datengebundenen Steuerelementen verwenden, die auf Vorlagen basieren, z. B. in ListView, FormView und Repeater. Die Verwendung von Vorlagen ermöglicht eine umfassende Steuerung des Layouts und der Darstellung von Daten im Steuerelement. Die Seiten sind jedoch an die verwendete Tabelle gebunden, da die Vorlage nicht automatisch Spalten generieren kann. Dies unterstützt Sie beim Erstellen benutzerdefinierter Seiten, die Dynamic Data-Features in den vorlagenbasierten datengebundenen Steuerelementen verwenden.

Wenn Sie vorlagenbasierte datengebundene Steuerelemente verwenden, können Sie den Vorlagen das DynamicControl-Steuerelement hinzufügen, um die Dynamic Data-Funktionalität zu nutzen. Durch die Verwendung eines DynamicControl-Steuerelements profitieren Sie von den folgenden Dynamic Data-Features:

Sie können das DynamicControl-Steuerelement nicht nur für vorlagenbasierte datengebundene Steuerelemente, sondern auch in einem TemplateField-Feld eines GridView-Steuerelements oder eines DetailsView-Steuerelements verwenden.

Führen Sie ein Online-Beispiel für dieses Feature aus.

So fügen Sie ein DynamicControl-Steuerelement zum Anzeigen von Daten hinzu

  1. Fügen Sie einer der Vorlagen des datengebundenen Steuerelements ein DynamicControl-Steuerelement hinzu.

    Hinweis:

    Normalerweise fügen Sie schreibgeschützte Felder in der ItemTemplate-Vorlage von vorlagenbasierten Steuerelementen hinzu, da diese zum Anzeigen von Daten verwendet wird. Sie können ein schreibgeschütztes Feld jedoch auch anderen Vorlagen hinzufügen, wenn der Feldwert nicht geändert werden soll.

  2. Legen Sie für die DataField-Eigenschaft den Namen der Spalte fest, die angezeigt werden soll, wie im folgenden Beispiel dargestellt:

    <asp:DynamicControl 
      DataField="ProductName"
       />
    
    Hinweis:

    Der Standardwert für die Mode-Eigenschaft ist ReadOnly. Sie müssen diese Eigenschaft daher nicht festlegen, um nur die Daten anzuzeigen.

  3. Wiederholen Sie die vorangehenden Schritte für jedes Datenfeld, das Sie anzeigen möchten.

So fügen Sie ein DynamicControl-Steuerelement für Bearbeitungsvorgänge hinzu

  1. Fügen Sie ein DynamicControl-Steuerelement der EditItemTemplate-Vorlage des datengebundenen Steuerelements oder Vorlagenfelds hinzu.

  2. Legen Sie für die DataField-Eigenschaft den Namen der Spalte fest, die Sie bearbeiten möchten.

  3. Legen Sie die Mode-Eigenschaft auf Edit fest, wie im folgenden Beispiel dargestellt:

    <asp:DynamicControl 
      DataField="ProductName"
      Mode="Edit"
       />
    
  4. Wiederholen Sie die vorangehenden Schritte für jedes Datenfeld, das Sie bearbeiten möchten.

So fügen Sie ein DynamicControl-Steuerelement für Einfügevorgänge hinzu

  1. Fügen Sie ein DynamicControl-Steuerelement der InsertItemTemplate-Vorlage des datengebundenen Steuerelements oder Vorlagenfelds hinzu.

  2. Legen Sie für die DataField-Eigenschaft den Namen der Spalte fest, für die Sie Daten einfügen möchten.

  3. Legen Sie die Mode-Eigenschaft auf Insert fest, wie im folgenden Beispiel dargestellt:

    <asp:DynamicControl 
      DataField="ProductName"
      Mode="Insert"
       />
    
  4. Wiederholen Sie die vorangehenden Schritte für jedes Datenfeld, für das Sie Daten einfügen möchten.

Beispiel

Das folgende Beispiel zeigt ein FormView-Steuerelement, das zum Erstellen einer benutzerdefinierten Seite mit Dynamic Data-Features DynamicControl-Steuerelemente verwendet.

<%@ Page Language="VB" %>

<script >

  Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs)
    DynamicDataManager1.RegisterControl(FormView1)
  End Sub

</script>

<!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>DynamicControl and Templated Data-Bound Controls Sample</title>
  <link href="~/Site.css" rel="stylesheet" type="text/css" />
</head>
<body>
  <form id="form1" >
    <div>

      <h2>Address Table</h2>

      <asp:DynamicDataManager ID="DynamicDataManager1" 
        AutoLoadForeignKeys="true" />

      <asp:FormView ID="FormView1"  
        DataSourceID="FormDataSource" 
        AllowPaging="true">
        <ItemTemplate>
          <table>
            <tr>
              <td>Address Line 1:</td>
              <td>
                <asp:DynamicControl  DataField="AddressLine1" />
              </td>
            </tr>
            <tr>
              <td>Address Line 2:</td>
              <td>
                <asp:DynamicControl  DataField="AddressLine2" />
              </td>
            </tr>
            <tr>
              <td>City:</td>
              <td>
                <asp:DynamicControl  DataField="City" />
              </td>
            </tr>
            <tr>
              <td>State/Province:</td>
              <td>
                <asp:DynamicControl  DataField="StateProvince" />
              </td>
            </tr>
            <tr>
              <td>Country:</td>
              <td>
                <asp:DynamicControl  DataField="CountryRegion" />
              </td>
            </tr>
            <tr>
              <td>Postal Code:</td>
              <td>
                <asp:DynamicControl  DataField="PostalCode" />
              </td>
            </tr>
            <tr>
              <td colspan="2">
                <asp:LinkButton ID="InsertButton"  CommandName="New" CausesValidation="false" Text="New" />
                <asp:LinkButton ID="EditButton"  CommandName="Edit" CausesValidation="false" Text="Edit" />
                <asp:LinkButton ID="DeleteButton"  CommandName="Delete" CausesValidation="false" Text="Delete" />
              </td>
            </tr>
          </table>
        </ItemTemplate>
        <EditItemTemplate>
          <table>
            <tr>
              <td>Address Line 1:</td>
              <td>
                <asp:DynamicControl  DataField="AddressLine1" Mode="Edit" />
              </td>
            </tr>
            <tr>
              <td>Address Line 2:</td>
              <td>
                <asp:DynamicControl  DataField="AddressLine2" Mode="Edit" />
              </td>
            </tr>
            <tr>
              <td>City:</td>
              <td>
                <asp:DynamicControl  DataField="City" Mode="Edit" />
              </td>
            </tr>
            <tr>
              <td>State/Province:</td>
              <td>
                <asp:DynamicControl  DataField="StateProvince" Mode="Edit" />
              </td>
            </tr>
            <tr>
              <td>Country:</td>
              <td>
                <asp:DynamicControl  DataField="CountryRegion" Mode="Edit" />
              </td>
            </tr>
            <tr>
              <td>Postal Code:</td>
              <td>
                <asp:DynamicControl  DataField="PostalCode" Mode="Edit" />
              </td>
            </tr>
            <tr>
              <td colspan="2">
                <asp:LinkButton ID="UpdateButton"  CommandName="Update">Update</asp:LinkButton>
                <asp:LinkButton ID="CancelEditButton"  CommandName="Cancel" CausesValidation="false">Cancel</asp:LinkButton>
              </td>
            </tr>
          </table>
        </EditItemTemplate>
        <InsertItemTemplate>
          <table>
            <tr>
              <td>Address Line 1:</td>
              <td>
                <asp:DynamicControl  DataField="AddressLine1" Mode="Insert" />
              </td>
            </tr>
            <tr>
              <td>Address Line 2:</td>
              <td>
                <asp:DynamicControl  DataField="AddressLine2" Mode="Insert" />
              </td>
            </tr>
            <tr>
              <td>City:</td>
              <td>
                <asp:DynamicControl  DataField="City" Mode="Insert" />
              </td>
            </tr>
            <tr>
              <td>State/Province:</td>
              <td>
                <asp:DynamicControl  DataField="StateProvince" Mode="Insert" />
              </td>
            </tr>
            <tr>
              <td>Country:</td>
              <td>
                <asp:DynamicControl  DataField="CountryRegion" Mode="Insert" />
              </td>
            </tr>
            <tr>
              <td>Postal Code:</td>
              <td>
                <asp:DynamicControl  DataField="PostalCode" Mode="Insert" />
              </td>
            </tr>
            <tr>
              <td colspan="2">
                <asp:LinkButton ID="InsertButton"  CommandName="Insert" Text="Insert" />
                <asp:LinkButton ID="CancelInsertButton"  CommandName="Cancel" CausesValidation="false" Text="Cancel" />
              </td>
            </tr>
          </table>
        </InsertItemTemplate>
        <PagerSettings Position="Bottom" Mode="NumericFirstLast" />
      </asp:FormView>

      <!-- This example uses Microsoft SQL Server and connects   -->
      <!-- to the AdventureWorksLT sample database.              -->
      <asp:LinqDataSource ID="FormDataSource" 
        TableName="Addresses" 
        ContextTypeName="AdventureWorksLTDataContext"
        EnableDelete="true"
        EnableInsert="true"
        EnableUpdate="true">
      </asp:LinqDataSource>

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

<script >
    protected void Page_Init(object sender, EventArgs e) {
        DynamicDataManager1.RegisterControl(FormView1);
    }
</script>

<!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>DynamicControl and Templated Data-Bound Controls Sample</title>
  <link href="~/Site.css" rel="stylesheet" type="text/css" />
</head>
<body>
  <form id="form1" >
    <div>

      <h2>Address Table</h2>

      <asp:DynamicDataManager ID="DynamicDataManager1" 
        AutoLoadForeignKeys="true" />

      <asp:FormView ID="FormView1"  
        DataSourceID="FormDataSource" 
        AllowPaging="true">
        <ItemTemplate>
          <table>
            <tr>
              <td>Address Line 1:</td>
              <td>
                <asp:DynamicControl  DataField="AddressLine1" />
              </td>
            </tr>
            <tr>
              <td>Address Line 2:</td>
              <td>
                <asp:DynamicControl  DataField="AddressLine2" />
              </td>
            </tr>
            <tr>
              <td>City:</td>
              <td>
                <asp:DynamicControl  DataField="City" />
              </td>
            </tr>
            <tr>
              <td>State/Province:</td>
              <td>
                <asp:DynamicControl  DataField="StateProvince" />
              </td>
            </tr>
            <tr>
              <td>Country:</td>
              <td>
                <asp:DynamicControl  DataField="CountryRegion" />
              </td>
            </tr>
            <tr>
              <td>Postal Code:</td>
              <td>
                <asp:DynamicControl  DataField="PostalCode" />
              </td>
            </tr>
            <tr>
              <td colspan="2">
                <asp:LinkButton ID="InsertButton"  CommandName="New" CausesValidation="false" Text="New" />
                <asp:LinkButton ID="EditButton"  CommandName="Edit" CausesValidation="false" Text="Edit" />
                <asp:LinkButton ID="DeleteButton"  CommandName="Delete" CausesValidation="false" Text="Delete" />
              </td>
            </tr>
          </table>
        </ItemTemplate>
        <EditItemTemplate>
          <table>
            <tr>
              <td>Address Line 1:</td>
              <td>
                <asp:DynamicControl  DataField="AddressLine1" Mode="Edit" />
              </td>
            </tr>
            <tr>
              <td>Address Line 2:</td>
              <td>
                <asp:DynamicControl  DataField="AddressLine2" Mode="Edit" />
              </td>
            </tr>
            <tr>
              <td>City:</td>
              <td>
                <asp:DynamicControl  DataField="City" Mode="Edit" />
              </td>
            </tr>
            <tr>
              <td>State/Province:</td>
              <td>
                <asp:DynamicControl  DataField="StateProvince" Mode="Edit" />
              </td>
            </tr>
            <tr>
              <td>Country:</td>
              <td>
                <asp:DynamicControl  DataField="CountryRegion" Mode="Edit" />
              </td>
            </tr>
            <tr>
              <td>Postal Code:</td>
              <td>
                <asp:DynamicControl  DataField="PostalCode" Mode="Edit" />
              </td>
            </tr>
            <tr>
              <td colspan="2">
                <asp:LinkButton ID="UpdateButton"  CommandName="Update">Update</asp:LinkButton>
                <asp:LinkButton ID="CancelEditButton"  CommandName="Cancel" CausesValidation="false">Cancel</asp:LinkButton>
              </td>
            </tr>
          </table>
        </EditItemTemplate>
        <InsertItemTemplate>
          <table>
            <tr>
              <td>Address Line 1:</td>
              <td>
                <asp:DynamicControl  DataField="AddressLine1" Mode="Insert" />
              </td>
            </tr>
            <tr>
              <td>Address Line 2:</td>
              <td>
                <asp:DynamicControl  DataField="AddressLine2" Mode="Insert" />
              </td>
            </tr>
            <tr>
              <td>City:</td>
              <td>
                <asp:DynamicControl  DataField="City" Mode="Insert" />
              </td>
            </tr>
            <tr>
              <td>State/Province:</td>
              <td>
                <asp:DynamicControl  DataField="StateProvince" Mode="Insert" />
              </td>
            </tr>
            <tr>
              <td>Country:</td>
              <td>
                <asp:DynamicControl  DataField="CountryRegion" Mode="Insert" />
              </td>
            </tr>
            <tr>
              <td>Postal Code:</td>
              <td>
                <asp:DynamicControl  DataField="PostalCode" Mode="Insert" />
              </td>
            </tr>
            <tr>
              <td colspan="2">
                <asp:LinkButton ID="InsertButton"  CommandName="Insert" Text="Insert" />
                <asp:LinkButton ID="CancelInsertButton"  CommandName="Cancel" CausesValidation="false" Text="Cancel" />
              </td>
            </tr>
          </table>
        </InsertItemTemplate>
        <PagerSettings Position="Bottom" Mode="NumericFirstLast" />
      </asp:FormView>

      <!-- This example uses Microsoft SQL Server and connects   -->
      <!-- to the AdventureWorksLT sample database.              -->
      <asp:LinqDataSource ID="FormDataSource" 
        TableName="Addresses" 
        ContextTypeName="AdventureWorksLTDataContext"
        EnableDelete="true"
        EnableInsert="true"
        EnableUpdate="true">
      </asp:LinqDataSource>

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

Kompilieren des Codes

Dieses Beispiel setzt Folgendes voraus:

  • Eine Dynamic Data-Website oder eine Webanwendung für Dynamic Data.

  • Die Beispieldatenbank AdventureWorks oder AdventureWorksLT. Informationen über das Herunterladen und Installieren der SQL Server-Beispieldatenbank finden Sie auf der CodePlex-Website unter Microsoft SQL Server Product Samples: Database. Vergewissern Sie sich, dass Sie die richtige Version der Beispieldatenbank für die von Ihnen verwendete SQL Server-Version (SQL Server 2005 oder SQL Server 2008) installieren.

  • Eine LINQ to SQL-Klasse, die so konfiguriert ist, dass sie auf die Tabelle Address der AdventureWorks- oder AdventureWorksLT-Datenbank zugreift.

  • Der Datenkontext ist im Dynamic Data-Modul in der Datei Global.asax registriert.

  • Im O/R-Designer ist festgelegt, dass die Spalten RowGuid und ModifiedData aus der Tabelle Address automatisch generiert werden. Sie sollten daher sicherstellen, dass die IsDbGenerated-Eigenschaft für diese beiden Spalten auf true festgelegt ist. Dies ist nur für den Einfügevorgang erforderlich.

Robuste Programmierung

Unter den folgenden Bedingungen kann eine Ausnahme ausgelöst werden:

  • Die Datenbank ist nicht verfügbar.

Siehe auch

Konzepte

Übersicht über ASP.NET Dynamic Data

Übersicht über das ASP.NET Dynamic Data-Modell

Referenz

DynamicControl

DetailsView

FormView

GridView

ListView

Repeater