Gewusst wie: Anpassen der Datenfeldanzeige im Datenmodell
Aktualisiert: November 2007
In diesem Thema wird beschrieben, wie Sie die Anzeige eines Datenfelds (Tabellenspalte) in ASP.NET Dynamic Data anpassen, indem Sie Ihre eigene Feldvorlage erstellen. Die folgenden Aufgaben werden in diesem Thema beschrieben:
Erstellen einer benutzerdefinierten Feldvorlage zum Anpassen der Datenfeldanzeige
Zuordnen der benutzerdefinierten Feldvorlage zum Datenfeld. Hierdurch wird die Datenmodellverbindung zwischen dem Datenfeld und der benutzerdefinierten Feldvorlage zur Verarbeitung der Anzeige hergestellt.
Hinweis: Wenn Sie eine Datenfeldanzeige mithilfe des Datenmodells anpassen, gilt diese Anpassung für die gesamte Website. Dies bedeutet, dass von Dynamic Data die benutzerdefinierte Feldvorlage anstelle der Standardvorlage (die anhand des Datenfeldtyps ausgewählt wird) zur Anzeige des Datenfelds verwendet wird.
So erstellen Sie eine benutzerdefinierte Feldvorlage
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Ordner DynamicData/FieldTemplates, und klicken Sie dann auf Neues Element hinzufügen.
Klicken Sie unter Installierte Vorlagen auf Feldvorlage.
Geben Sie im Feld Name den Namen des Steuerelements ein. Sie können einen beliebigen Namen verwenden. Vergewissern Sie sich, dass das Kontrollkästchen Code in eigener Datei platzieren aktiviert ist.
Wechseln Sie zur gerade erstellten Benutzersteuerelementdatei, bzw. öffnen Sie diese Datei.
Fügen Sie der @ Control-Direktive ein CodeFile-Attribut hinzu, das auf die Code-Behind-Datei verweist, und ein Inherits-Attribut, das auf die Steuerelementklasse verweist.
<%@ Control Language="C#" CodeFile=MyCustomControl.ascx.cs" Inherits="MyCustomControl" %>
<%@ Control Language="VB" CodeFile=MyCustomControl.ascx.cs" Inherits="MyCustomControl" %>
Erstellen Sie das Markup, das zur Datenanzeige gerendert wird.
Das folgende Beispiel zeigt ein Label-Steuerelement, dessen Text-Eigenschaft auf die aktuelle Feldwertzeichenfolge festgelegt ist und für dessen OnDataBinding-Eigenschaft ein benutzerdefinierter Ereignishandler verwendet wird.
<asp:Label id="TextLabel1" OnDataBinding="DataBindingHandler" Text='<%# FieldValueString %>'> </asp:Label>
Speichern und schließen Sie die Benutzersteuerelementdatei.
Öffnen Sie die Code-Behind-Datei für das Benutzersteuerelement.
Fügen Sie die Namespacedirektive hinzu, die sich auf System.Web.DynamicData bezieht, indem Sie das Imports-Schlüsselwort in Visual Basic oder das using-Schlüsselwort in Visual C# verwenden.
using System.Web.DynamicData;
Imports System.Web.DynamicData
Leiten Sie wie im Folgenden gezeigt die partielle Klasse des Benutzersteuerelements von der FieldTemplateUserControl-Klasse ab.
partial class MyCustomControl: FieldTemplateUserControl
{ }
Public Partial Class MyCustomControl Inherits _ FieldTemplateUserControl End Class
Um anzupassen, wie das Datenfeld vom Steuerelement angezeigt wird, verarbeiten Sie das OnDataBinding-Ereignis des Benutzersteuerelements. Sie können den Wert des aktuellen Datenfelds im Handler über die FieldValue-Eigenschaft des Steuerelements abrufen und dann die Anzeige entsprechend anpassen.
Im folgenden Beispiel wird die Verarbeitung des OnDataBinding-Ereignisses veranschaulicht.
public void DataBindingHandler(object sender, EventArgs e) { // Define the understocked threshold. short underStockedThreshold = 150; // Get the current number of items in stock. short currentValue = (short)FieldValue; // Check product stock. if (currentValue < underStockedThreshold) { // Customize display here. For example you show the data with //a red background. } }
Public Sub DataBindingHandler(ByVal sender As Object, _ ByVal e As EventArgs) ' Define the understocked threshold. Dim underStockedThreshold As Short = 150 ' Get the current number of items in stock. Dim currentValue As Short = DirectCast(FieldValue, Short) ' Check product stock. If currentValue < underStockedThreshold Then 'Customize display here. For example you show the data with 'a red background. End If End Sub
Schließen Sie die Code-Behind-Datei des Benutzersteuerelements. Sie haben jetzt eine benutzerdefinierte Feldvorlage erstellt.
So ordnen Sie einer benutzerdefinierten Feldvorlage ein Datenfeld zu
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Ordner App_Code, und klicken Sie dann auf Neues Element hinzufügen.
Klicken Sie unter Installierte Vorlagen auf Klasse.
Geben Sie im Feld Name den Namen der Datenbanktabelle ein, die die anzuzeigenden Daten für die benutzerdefinierte Feldvorlage enthält.
Wenn das benutzerdefinierte Steuerelement z. B. Daten aus der Tabelle Products anzeigen soll, lautet der Dateiname Products.cs oder Product.vb und der Klassenname Product. Diese Datei enthält auch eine Erweiterungsklasse, mit der Sie die Anzeige des Datenfelds anpassen können.
Wechseln Sie zur gerade erstellten Klassendatei, bzw. öffnen Sie diese Datei.
Fügen Sie der Klassendefinition das Partial-Schlüsselwort in Visual Basic bzw. das partial-Schlüsselwort in Visual C# hinzu, um eine partielle Klasse zu erstellen.
Fügen Sie die Namespacedirektive hinzu, die sich auf System.Web.DynamicData und auf System.ComponentModel.DataAnnotations bezieht, indem Sie das Imports-Schlüsselwort in Visual Basic bzw. das using-Schlüsselwort in Visual C# verwenden.
using System.Web.DynamicData; using System.ComponentModel.DataAnnotations;
Imports System.Web.DynamicData Imports System.ComponentModel.DataAnnotations
Fügen Sie der partiellen Klassendefinition das MetadataTypeAttribute-Attribut hinzu. Beim Parameter des Attributs handelt es sich um den Namen der Metadatenerweiterungsklasse, die zur Verarbeitung der Anzeigeanpassung für das Datenfeld erstellt wird.
[MetadataType(typeof(ProductMetadata))] public partial class Product { }
<MetadataType(GetType(ProductMetadata))> _ Public Partial Class Product End Class
Erstellen Sie eine Klasse, die als Metadatenerweiterungsklasse fungiert. Sie können einen beliebigen Namen für die Klasse verwenden, der Klassenname muss jedoch mit dem Namen übereinstimmen, auf den Sie im vorherigen Schritt im MetadataTypeAttribute-Attribut verwiesen haben.
Erstellen Sie in der Metadatenklasse ein Feld, dessen Name dem anzuzeigenden Datenfeld entspricht. Kennzeichnen Sie das Feld mit dem UIHintAttribute-Attribut, und geben Sie den Namen der für die Anzeige verwendeten benutzerdefinierten Feldvorlage an.
Der einzige Zweck der Erweiterungsklasse besteht in der Definition des UIHintAttribute-Attributs. Sie müssen der Klasse also keinen weiteren Code hinzufügen.
Das folgende Beispiel enthält eine vollständige Definition der Metadatenklasse, die ein einzelnes Feld (mit dem UIHintAttribute-Attribut) enthält, durch das die benutzerdefinierte Anzeige für das Feld UnitsInStock festgelegt wird.
public class ProductMetadata [UIHint("UnitsInStock")] public object UnitsInStock; }
Public Class ProductMetadata <UIHint("UnitsInStock")> _ Public UnitsInStock As Object End Class
Beispiel
Im folgenden Beispiel wird eine benutzerdefinierte Feldvorlage gezeigt, mit der die Artikelmenge überprüft wird. Falls nicht genügend Artikel des Produkts auf Lager sind, zeigt die Feldvorlage den Wert mit rotem Vordergrund an.
<%@ Control Language="VB" CodeFile="UnitsInStock.ascx.vb"
Inherits="DynamicData_FieldTemplates_UnitsInStock" %>
<asp:Label id="TextLabel1" OnDataBinding="DataBindingHandler"
Text='<%# FieldValueString %>' ></asp:Label>
<%@ Control Language="C#" CodeFile="UnitsInStock.ascx.cs"
Inherits="DynamicData_FieldTemplates_UnitsInStock" %>
<asp:Label id="TextLabel1" OnDataBinding="DataBindingHandler"
Text='<%# FieldValueString %>' ></asp:Label>
Imports System.Web.DynamicData
Partial Public Class DynamicData_FieldTemplates_UnitsInStock
Inherits FieldTemplateUserControl
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
End Sub
' DataBinding event handler.
Public Sub DataBindingHandler(ByVal sender As Object, _
ByVal e As EventArgs)
' Define product understocked threshold.
Dim underStockedThreshold As Short = 150
' Get the current number of items in stock.
Dim currentValue As Short = DirectCast(FieldValue, Short)
' Check product stock.
If currentValue < underStockedThreshold Then
' The product is understocked, set its
' foreground color to red.
TextLabel1.ForeColor = System.Drawing.Color.Red
End If
End Sub
End Class
using System.Web.DynamicData;
public partial class DynamicData_FieldTemplates_UnitsInStock : FieldTemplateUserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
// DataBinding event handler.
public void DataBindingHandler(object sender, EventArgs e)
{
// Define product understocked threshold.
short underStockedThreshold = 150;
// Get the current number of items in stock.
short currentValue = (short)FieldValue;
// Check product stock.
if (currentValue < underStockedThreshold)
{
// The product is understocked, set its
// foreground color to red.
TextLabel1.ForeColor = System.Drawing.Color.Red;
}
}
}
Kompilieren des Codes
Microsoft Visual Studio 2008 Service Pack 1 oder Visual Web Developer 2008 Express Edition Service Pack 1
Die AdventureWorksLT-Beispieldatenbank. 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 (Microsoft SQL Server 2005 oder Microsoft SQL Server 2008) installieren.
Eine Dynamic Data-Website. So können Sie einen Datenkontext für die Datenbank und die Klasse erstellen, die das anzupassende Datenfeld und die zu überschreibenden Methoden enthält. Außerdem wird die Umgebung erstellt, in der die zuvor beschriebene Seite verwendet werden soll. Weitere Informationen hierzu finden Sie unter Exemplarische Vorgehensweise: Erstellen einer neuen Dynamic Data-Website mithilfe des Gerüstbaus.
Siehe auch
Aufgaben
Gewusst wie: Anpassen der Darstellung und des Verhaltens von Datenfeldern im Datenmodell
Exemplarische Vorgehensweise: Hinzufügen von Dynamic Data zu einer vorhandenen Website
Konzepte
Übersicht über ASP.NET Dynamic Data-Feldvorlagen