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:
Automatisches Rendern des korrekten Steuerelements für ein Feld auf Grundlage des Datentyps.
Steuern von Vorlagen für das Rendering der verschiedenen Datentypen, die global für die gesamte Anwendung geändert werden können.
Bereitstellen von integrierter Datenvalidierung auf der Grundlage des Datenbankschemas.
Anpassen des Renderns von Daten für einzelne Felder mithilfe von Attributen im Datenmodell oder mithilfe der UIHint-Eigenschaft. Weitere Informationen finden Sie unter Übersicht über das ASP.NET Dynamic Data-Modell und Gewusst wie: Anpassen der Darstellung und des Verhaltens von Datenfeldern in einem Dynamic Data-Steuerelement.
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
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.
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.
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
Fügen Sie ein DynamicControl-Steuerelement der EditItemTemplate-Vorlage des datengebundenen Steuerelements oder Vorlagenfelds hinzu.
Legen Sie für die DataField-Eigenschaft den Namen der Spalte fest, die Sie bearbeiten möchten.
Legen Sie die Mode-Eigenschaft auf Edit fest, wie im folgenden Beispiel dargestellt:
<asp:DynamicControl DataField="ProductName" Mode="Edit" />
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
Fügen Sie ein DynamicControl-Steuerelement der InsertItemTemplate-Vorlage des datengebundenen Steuerelements oder Vorlagenfelds hinzu.
Legen Sie für die DataField-Eigenschaft den Namen der Spalte fest, für die Sie Daten einfügen möchten.
Legen Sie die Mode-Eigenschaft auf Insert fest, wie im folgenden Beispiel dargestellt:
<asp:DynamicControl DataField="ProductName" Mode="Insert" />
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