Freigeben über


Formatieren des DataList- und Wiederholungssteuerelements auf Datenbasis (VB)

von Scott Mitchell

PDF herunterladen

In diesem Tutorial gehen wir Schritt für Schritt durch Beispiele für das Formatieren der Darstellung der DataList- und Repeater-Steuerelemente, entweder mithilfe von Formatierungsfunktionen innerhalb von Vorlagen oder durch Verarbeitung des DataBound-Ereignisses.

Einleitung

Wie wir im vorherigen Tutorial gesehen haben, bietet die DataList eine Reihe von formatbezogenen Eigenschaften, die ihre Darstellung beeinflussen. Insbesondere haben wir gesehen, wie Sie den DataList s HeaderStyle, , ItemStyle, AlternatingItemStyleund SelectedItemStyle Eigenschaften Standard-CSS-Klassen zuweisen. Zusätzlich zu diesen vier Eigenschaften enthält die DataList eine Reihe anderer stilbezogener Eigenschaften, wie z. B. Font, ForeColor, BackColor und BorderWidth, um einige zu nennen. Das Repeater-Steuerelement enthält keine formatbezogenen Eigenschaften. Diese Stileinstellungen müssen direkt innerhalb des Markups in den Vorlagen des Repeaters vorgenommen werden.

Häufig hängt die Formatierung von Daten jedoch von den Daten selbst ab. Wenn Sie beispielsweise Produkte auflisten, möchten wir möglicherweise die Produktinformationen in einer hellgrauen Schriftfarbe anzeigen, wenn sie nicht mehr vorhanden ist, oder wir möchten den UnitsInStock Wert hervorheben, wenn er null ist. Wie wir in früheren Lernprogrammen gesehen haben, bieten gridView, DetailsView und FormView zwei verschiedene Möglichkeiten zum Formatieren ihrer Darstellung basierend auf ihren Daten:

  • Das DataBound Ereignis erstellt einen Ereignishandler für das entsprechende DataBound Ereignis, das ausgelöst wird, nachdem die Daten an jedes Element gebunden wurden (für das GridView war es das RowDataBound Ereignis; für dataList und Repeater ist es das ItemDataBound Ereignis). In diesem Ereignishandler können die soeben gebundenen Daten untersucht und Formatierungsentscheidungen getroffen werden. Wir haben dieses Verfahren im Lernprogramm " Benutzerdefinierte Formatierung basierend auf Daten " untersucht.
  • Formatierungsfunktionen in Vorlagen bei Verwendung von TemplateFields in den DetailsView- oder GridView-Steuerelementen oder einer Vorlage im FormView-Steuerelement können wir der CodeBehind-Klasse der ASP.NET Seite, der Business Logic Layer oder einer anderen Klassenbibliothek, auf die über die Webanwendung zugegriffen werden kann, eine Formatierungsfunktion hinzufügen. Diese Formatierungsfunktion kann eine beliebige Anzahl von Eingabeparametern akzeptieren, muss jedoch den HTML-Code zurückgeben, der in der Vorlage gerendert werden soll. Formatierungsfunktionen wurden zuerst im Lernprogramm über die Verwendung von TemplateFields im GridView-Steuerelement untersucht.

Beide Formatierungstechniken sind mit den DataList- und Repeater-Steuerelementen verfügbar. In diesem Tutorial werden wir Schritt für Schritt Beispiele mit beiden Techniken für beide Steuerelemente durchgehen.

Verwenden desItemDataBoundEreignishandlers

Wenn Daten an eine DataList gebunden werden, entweder aus einem Datenquellensteuerelement oder durch programmgesteuertes Zuweisen von Daten an die Eigenschaft des Steuerelements DataSource und Aufrufen seiner DataBind() Methode, wird das Ereignis DataBinding der DataList ausgelöst, die Datenquelle aufgezählt, und jeder Datensatz wird an die DataList gebunden. Für jeden Datensatz in der Datenquelle erstellt die DataList ein DataListItem Objekt, das dann an den aktuellen Datensatz gebunden ist. Während dieses Prozesses löst die DataList zwei Ereignisse aus:

  • ItemCreated wird ausgelöst, nachdem das DataListItem erstellt wurde
  • ItemDataBound wird ausgelöst, nachdem der aktuelle Datensatz an den DataListItem gebunden worden ist.

In den folgenden Schritten wird der Datenbindungsprozess für das DataList-Steuerelement beschrieben.

  1. Das DataList-Ereignis DataBinding wird ausgelöst.

  2. Die Daten sind an die DataList gebunden.

    Für jeden Datensatz in der Datenquelle

    1. Erstellen eines DataListItem-Objekts
    2. Auslösen des EreignissesItemCreated
    3. Datensatz an den DataListItem binden
    4. Auslösen des EreignissesItemDataBound
    5. Fügen Sie das DataListItem zur Items Sammlung hinzu

Beim Binden von Daten an das Repeater-Steuerelement wird exakt die gleiche Abfolge von Schritten durchlaufen. Der einzige Unterschied besteht darin, dass der Repeater anstelle von DataListItem Instanzen RepeaterItems verwendet.

Hinweis

Der scharfsinnige Leser hat möglicherweise eine leichte Anomalie in der Abfolge der Schritte bemerkt, die auftreten, wenn die DataList und der Repeater an Daten gebunden sind, im Gegensatz zur Bindung der GridView an Daten. Am Ende des Datenbindungsprozesses löst GridView das DataBound Ereignis aus. Weder das DataList-Steuerelement noch das Repeater-Steuerelement weisen ein solches Ereignis auf. Dies liegt daran, dass die DataList- und Repeater-Steuerelemente im ASP.NET 1.x-Zeitraum erstellt wurden, bevor das Ereignishandlermuster vor und nach dem Ereignislevel üblich wurde.

Wie bei gridView besteht eine Option zum Formatieren basierend auf den Daten darin, einen Ereignishandler für das ItemDataBound Ereignis zu erstellen. Dieser Ereignishandler überprüft die Daten, die soeben an das DataListItem oder RepeaterItem gebunden wurden, und wirkt sich bei Bedarf auf die Formatierung des Steuerelements aus.

Für das DataList-Steuerelement können Formatierungsänderungen für das gesamte Element mithilfe der DataListItem stilbezogenen Eigenschaften implementiert werden, die den Standard Font, ForeColor, BackColor, CssClass und so weiter umfassen. Um die Formatierung bestimmter Websteuerelemente innerhalb der DataList-Vorlage zu beeinflussen, müssen wir programmgesteuert auf diese Steuerelemente zugreifen und deren Stil ändern. Wir haben gesehen, wie man dies im Lernprogramm Benutzerdefinierte Formatierung basierend auf Daten erreicht. Wie beim Repeater-Steuerelement verfügt die RepeaterItem Klasse über keine formatbezogenen Eigenschaften. Daher müssen alle Änderungen am Stil eines RepeaterItem im ItemDataBound-Ereignishandler durch programmgesteuertes Zugreifen und Aktualisieren von Websteuerelementen innerhalb der Vorlage erfolgen.

Da die ItemDataBound Formatierungstechnik für DataList und Repeater nahezu identisch ist, konzentriert sich unser Beispiel auf die Verwendung der DataList.

Schritt 1: Anzeigen von Produktinformationen in der DataList

Bevor wir uns gedanken über die Formatierung machen, erstellen wir zunächst eine Seite, die eine DataList zum Anzeigen von Produktinformationen verwendet. Im vorherigen Lernprogramm haben wir eine DataList erstellt, die für jedes Produkt den Namen, die Kategorie, den Lieferanten, die Menge pro Einheit und den Preis anzeigt. Lassen Sie uns diese Funktionalität hier in diesem Lernprogramm wiederholen. Zu diesem Zweck können Sie entweder die DataList und seine ObjectDataSource von Grund auf neu erstellen, oder Sie können diese Steuerelemente von der Seite kopieren, die im vorherigen Lernprogramm erstellt wurde (Basics.aspx) und sie in die Seite für dieses Lernprogramm einfügen (Formatting.aspx).

Nachdem Sie die DataList- und ObjectDataSource-Funktionalität von Basics.aspx in Formatting.aspx eins repliziert haben, nehmen Sie sich einen Moment Zeit, um die DataList-Eigenschaft ID von DataList1 zu einem beschreibenderen ItemDataBoundFormattingExample zu ändern. Zeigen Sie als Nächstes die DataList in einem Browser an. Wie in Abbildung 1 dargestellt, besteht der einzige Formatierungsunterschied zwischen jedem Produkt darin, dass sich die Hintergrundfarbe wechselt.

Die Produkte werden im DataList-Steuerelement aufgeführt.

Abbildung 1: Die Produkte werden im DataList-Steuerelement aufgelistet (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)

In diesem Lernprogramm formatieren wir die DataList so, dass alle Produkte mit einem Preis unter 20,00 $ sowohl den Namen als auch den Einzelpreis gelb hervorgehoben haben.

Schritt 2: Programmgesteuertes Ermitteln des Werts der Daten im ItemDataBound-Ereignishandler

Da nur diese Produkte mit einem Preis unter 20,00 $ die benutzerdefinierte Formatierung angewendet haben, müssen wir in der Lage sein, jeden Produktpreis zu bestimmen. Beim Binden von Daten an eine DataList listet die DataList die Datensätze in der Datenquelle auf und erstellt für jeden Datensatz eine DataListItem Instanz, die den Datenquellendatensatz an die DataListItemDatenquelle bindet. Nachdem die Daten des jeweiligen Datensatzes an das aktuelle DataListItem Objekt gebunden wurden, wird das DataList-Ereignis ItemDataBound ausgelöst. Wir können einen Ereignishandler für dieses Ereignis erstellen, um die Datenwerte für den aktuellen DataListItem zu prüfen und basierend auf diesen Werten alle Formatierungsänderungen erforderlich zu machen.

Erstellen Sie ein ItemDataBound Ereignis für die DataList, und fügen Sie den folgenden Code hinzu:

Protected Sub ItemDataBoundFormattingExample_ItemDataBound _
    (sender As Object, e As DataListItemEventArgs) _
    Handles ItemDataBoundFormattingExample.ItemDataBound
    If e.Item.ItemType = ListItemType.Item OrElse _
       e.Item.ItemType = ListItemType.AlternatingItem Then
        ' Programmatically reference the ProductsRow instance
        ' bound to this DataListItem
        Dim product As Northwind.ProductsRow = _
            CType(CType(e.Item.DataItem, System.Data.DataRowView).Row, _
                Northwind.ProductsRow)
        ' See if the UnitPrice is not NULL and less than $20.00
        If Not product.IsUnitPriceNull() AndAlso product.UnitPrice < 20 Then
            ' TODO: Highlight the product's name and price
        End If
    End If
End Sub

Das Konzept und die Semantik hinter dem DataList-Ereignishandler ItemDataBound sind zwar identisch mit denen, die vom GridView-Ereignishandler RowDataBound im Lernprogramm " Benutzerdefinierte Formatierung basierend auf Daten " verwendet werden, die Syntax unterscheidet sich geringfügig. Wenn das ItemDataBound Ereignis ausgelöst wird, werden die nur gebundenen Daten über DataListItem an den entsprechenden Ereignishandler übergeben (anstelle des e.Item, wie beim GridView-Ereignishandler e.Row). Der DataList-Ereignishandler ItemDataBound wird für jede Zeile ausgelöst, die der DataList hinzugefügt wird, einschließlich Kopfzeilen, Fußzeilenzeilen und Trennzeilen. Die Produktinformationen sind jedoch nur an die Datenzeilen gebunden. Daher müssen wir bei Verwendung des ItemDataBound Ereignisses, um die an die DataList gebundenen Daten zu prüfen, zuerst sicherstellen, dass wir mit einem Datenelement arbeiten. Dies kann erreicht werden, indem Sie die DataListItem Eigenschaft s ItemTypeüberprüfen, die einen der folgenden acht Werte aufweisen kann:

  • AlternatingItem
  • EditItem
  • Footer
  • Header
  • Item
  • Pager
  • SelectedItem
  • Separator

Sowohl Item als auch AlternatingItem``DataListItem bilden die Datenobjekte der DataList. Angenommen, wir arbeiten mit einer Item oder AlternatingItem, wir greifen auf die tatsächliche ProductsRow Instanz zu, die an die aktuelle DataListItemInstanz gebunden wurde. Die DataListItem EigenschaftDataItems enthält einen Verweis auf dasDataRowView Objekt, dessen Row Eigenschaft einen Verweis auf das tatsächlicheProductsRow Objekt enthält.

Als Nächstes überprüfen wir die Eigenschaft der ProductsRow Instanz UnitPrice . Da das Feld in der Tabelle "Products" UnitPrice Werte zulässt NULL, sollten wir, bevor wir versuchen, auf die UnitPrice-Eigenschaft zuzugreifen, zuerst prüfen, ob es einen NULL-Wert mithilfe der IsUnitPriceNull()-Methode hat. Wenn der UnitPrice Wert nicht NULList, überprüfen wir, ob er kleiner als 20,00 $ ist. Wenn es tatsächlich unter 20,00 $ liegt, müssen wir die benutzerdefinierte Formatierung anwenden.

Schritt 3: Hervorheben des Produktnamens und des Preises

Sobald bekannt ist, dass der Preis eines Produkts kleiner als 20,00 $ ist, bleibt nur noch, den Namen und den Preis hervorzuheben. Dazu müssen wir zunächst programmgesteuert auf die Etikettensteuerelemente im ItemTemplate verweisen, die den Namen und den Preis des Produkts anzeigen. Zuerst müssen wir sie einen gelben Hintergrund anzeigen lassen. Diese Formatierungsinformationen können durch direktes Ändern der BackColor Bezeichnungseigenschaften LabelID.BackColor = Color.Yellow angewendet werden. Im Idealfall sollten jedoch alle anzeigebezogenen Aspekte durch kaskadierende Stylesheets ausgedrückt werden. Tatsächlich verfügen wir bereits über ein Stylesheet, das die gewünschte Formatierung bereitstellt, die in Styles.css - AffordablePriceEmphasisdem Lernprogramm " Benutzerdefinierte Formatierung basierend auf Daten " erstellt und erläutert wurde.

Um die Formatierung anzuwenden, setzen Sie einfach die Eigenschaften der beiden Label Web-Steuerelemente CssClass auf AffordablePriceEmphasis, wie im folgenden Code gezeigt.

' Highlight the product name and unit price Labels
' First, get a reference to the two Label Web controls
Dim ProductNameLabel As Label = CType(e.Item.FindControl("ProductNameLabel"), Label)
Dim UnitPriceLabel As Label = CType(e.Item.FindControl("UnitPriceLabel"), Label)
' Next, set their CssClass properties
If ProductNameLabel IsNot Nothing Then
    ProductNameLabel.CssClass = "AffordablePriceEmphasis"
End If
If UnitPriceLabel IsNot Nothing Then
    UnitPriceLabel.CssClass = "AffordablePriceEmphasis"
End If

Nachdem der ItemDataBound Ereignishandler abgeschlossen ist, öffnen Sie erneut die Formatting.aspx Seite in einem Browser. Wie in Abbildung 2 dargestellt, haben diese Produkte mit einem Preis unter 20,00 $ sowohl ihren Namen als auch ihren Preis hervorgehoben.

Diese Produkte unter 20,00 $ sind hervorgehoben.

Abbildung 2: Diese Produkte kleiner als 20,00 $ sind hervorgehoben (Klicken Sie, um das Bild in voller Größe anzuzeigen)

Hinweis

Da die DataList als HTML <table>gerendert wird, verfügen ihre DataListItem Instanzen über formatbezogene Eigenschaften, die festgelegt werden können, um eine bestimmte Formatvorlage auf das gesamte Element anzuwenden. Wenn wir beispielsweise den gesamten Artikel gelb hervorheben möchten, wenn der Preis unter 20,00 $ liegt, könnten wir den Code ersetzen, der auf die Labels verweist, und deren CssClass-Eigenschaften mit der folgenden Codezeile festlegen: e.Item.CssClass = "AffordablePriceEmphasis" (siehe Abbildung 3).

Die RepeaterItem, die das Repeater-Steuerelement ausmachen, bieten jedoch keine stilbezogenen Eigenschaften an. Daher erfordert das Anwenden von benutzerdefinierter Formatierung auf den Repeater das Anwenden von Stileigenschaften auf die Websteuerelemente innerhalb der Repeater-Vorlagen, genau wie in Abbildung 2.

Das gesamte Produkt wird für Produkte unter $20,00 hervorgehoben.

Abbildung 3: Das gesamte Produktelement ist für Produkte unter 20,00 $ hervorgehoben (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)

Verwenden von Formatierungsfunktionen aus der Vorlage

Im Lernprogramm "Using TemplateFields" im GridView Control-Lernprogramm haben wir erfahren, wie Sie eine Formatierungsfunktion in einem GridView TemplateField verwenden, um benutzerdefinierte Formatierungen basierend auf den Daten anzuwenden, die an die Zeilen von GridView gebunden sind. Eine Formatierungsfunktion ist eine Methode, die aus einer Vorlage aufgerufen werden kann, und gibt den HTML-Code zurück, der an seiner Stelle ausgegeben werden soll. Formatierungsfunktionen können sich in der codeBehind-Klasse der ASP.NET Seite befinden oder in Klassendateien im App_Code Ordner oder in einem separaten Klassenbibliotheksprojekt zentralisiert werden. Das Verschieben der Formatierungsfunktion aus der CodeBehind-Klasse der ASP.NET Seite ist ideal, wenn Sie die gleiche Formatierungsfunktion in mehreren ASP.NET Seiten oder in anderen ASP.NET Webanwendungen verwenden möchten.

Um Formatierungsfunktionen zu veranschaulichen, sollten die Produktinformationen den Text [EINGESTELLT] neben dem Namen des Produkts enthalten, wenn es eingestellt ist. Lassen Sie uns auch den Preis gelb hervorgehoben haben, wenn er kleiner als 20,00 $ ist (wie im ItemDataBound Ereignishandlerbeispiel). Wenn der Preis 20,00 $ oder höher ist, lassen Sie uns nicht den tatsächlichen Preis anzeigen, sondern stattdessen den Text, Rufen Sie bitte ein Preisangebot an. Abbildung 4 zeigt einen Screenshot der Artikelauflistung mit diesen Angewendeten Formatierungsregeln.

Screenshot mit Produkten, die im DataList-Steuerelement aufgeführt sind, wobei der Preis der Produkte, die mehr als 20,00 $ kosten, durch den Text

Abbildung 4: Für teure Produkte wird der Preis durch den Text ersetzt. Bitte rufen Sie ein Preisangebot auf (Klicken Sie hier, um das Bild mit voller Größe anzuzeigen)

Schritt 1: Erstellen der Formatierungsfunktionen

In diesem Beispiel benötigen wir zwei Formatierungsfunktionen, eine, die den Produktnamen zusammen mit dem Text [EINGESTELLT], bei Bedarf anzeigt, und eine andere, die entweder einen hervorgehobenen Preis anzeigt, wenn er kleiner als 20,00 $ ist, oder den Text, bitte rufen Sie andernfalls ein Preisangebot an. Erstellen wir diese Funktionen in der codeBehind-Klasse der ASP.NET Seite und benennen sie DisplayProductNameAndDiscontinuedStatus und DisplayPrice. Beide Methoden müssen den HTML-Code zurückgeben, um als Zeichenfolge gerendert zu werden, und beide müssen markiert Protected (oder Public) werden, um aus dem deklarativen Syntaxteil der ASP.NET Seite aufgerufen werden zu können. Der Code für diese beiden Methoden folgt:

Protected Function DisplayProductNameAndDiscontinuedStatus _
    (productName As String, discontinued As Boolean) As String
    ' Return just the productName if discontinued is false
    If Not discontinued Then
        Return productName
    Else
        ' otherwise, return the productName appended with the text "[DISCONTINUED]"
        Return String.Concat(productName, " [DISCONTINUED]")
    End If
End Function
Protected Function DisplayPrice(product As Northwind.ProductsRow) As String
    ' If price is less than $20.00, return the price, highlighted
    If Not product.IsUnitPriceNull() AndAlso product.UnitPrice < 20 Then
        Return String.Concat("<span class="AffordablePriceEmphasis">", _
                             product.UnitPrice.ToString("C"), "</span>")
    Else
        ' Otherwise return the text, "Please call for a price quote"
        Return "<span>Please call for a price quote</span>"
    End If
End Function

Beachten Sie, dass die DisplayProductNameAndDiscontinuedStatus Methode die Werte der productName Felder und discontinued Datenfelder als skalare Werte akzeptiert, während die DisplayPrice Methode eine ProductsRow Instanz akzeptiert (anstelle eines unitPrice skalaren Werts). Beide Ansätze funktionieren; wenn die Formatierungsfunktion jedoch mit skalaren Werten arbeitet, die Datenbankwerte NULL enthalten können (wie z.B. UnitPrice; weder ProductName noch Discontinued erlauben NULL-Werte), muss besondere Sorgfalt bei der Behandlung dieser skalaren Eingaben angewendet werden.

Insbesondere muss der Eingabeparameter vom Typ Object sein, da der eingehende Wert eine DBNull Instanz anstelle des erwarteten Datentyps sein kann. Darüber hinaus muss eine Überprüfung durchgeführt werden, um festzustellen, ob es sich bei dem eingehenden Wert um einen Datenbankwert NULL handelt. Wenn wir also möchten, dass die DisplayPrice Methode den Preis als Skalarwert akzeptiert, müssen wir den folgenden Code verwenden:

Protected Function DisplayPrice(ByVal unitPrice As Object) As String
    ' If price is less than $20.00, return the price, highlighted
    If Not Convert.IsDBNull(unitPrice) AndAlso CType(unitPrice, Decimal) < 20 Then
        Return String.Concat("<span class="AffordablePriceEmphasis">", _
            CType(unitPrice, Decimal).ToString("C"), "</span>")
    Else
        ' Otherwise return the text, "Please call for a price quote"
        Return "<span>Please call for a price quote</span>"
    End If
End Function

Beachten Sie, dass der unitPrice Eingabeparameter vom Typ Object ist und dass die bedingte Anweisung so geändert wurde, um festzustellen, ob unitPriceDBNull ist oder nicht. Da der unitPrice Eingabeparameter als ObjectKennung übergeben wird, muss er in einen Dezimalwert umgewandelt werden.

Schritt 2: Aufrufen der Formatierungsfunktion aus der DataList s ItemTemplate

Mit den Formatierungsfunktionen, die zu unserer CodeBehind-Klasse der ASP.NET-Seite hinzugefügt wurden, bleibt nur noch, diese Formatierungsfunktionen durch den DataList-Bereich ItemTemplate aufzurufen. Um eine Formatierungsfunktion aus einer Vorlage aufzurufen, platzieren Sie den Funktionsaufruf in der Datenbindungssyntax:

<%# MethodName(inputParameter1, inputParameter2, ...) %>

In der DataList ItemTemplate zeigt das ProductNameLabel Label-Web-Controller derzeit den Namen des Produkts an, indem das Ergebnis Text seiner <%# Eval("ProductName") %>-Eigenschaft zugewiesen wird. Damit der Name und der Text [EINGESTELLT] angezeigt werden, aktualisieren Sie bei Bedarf die deklarative Syntax so, dass sie stattdessen die Text Eigenschaft dem Wert der DisplayProductNameAndDiscontinuedStatus Methode zuweist. Dabei müssen wir den Namen des Produkts und nicht mehr vorhandene Werte mithilfe der Eval("columnName") Syntax übergeben. Eval gibt einen Wert vom Typ zurück Object, aber die DisplayProductNameAndDiscontinuedStatus Methode erwartet Eingabeparameter vom Typ String und Boolean; daher müssen wir die von der Eval Methode zurückgegebenen Werte in die erwarteten Eingabeparametertypen umwandeln, z. B.:

<h4>
    <asp:Label ID="ProductNameLabel" runat="server"
        Text='<%# DisplayProductNameAndDiscontinuedStatus((string) Eval("ProductName"),
              (bool) Eval("Discontinued")) %>'>
    </asp:Label>
</h4>

Um den Preis anzuzeigen, können wir einfach die Eigenschaft UnitPriceLabel Label Text auf den Wert festlegen, der von der DisplayPrice Methode zurückgegeben wird, genau wie wir es bei der Anzeige des Produktnamens und des [EINGESTELLT]-Texts gemacht haben. Anstatt jedoch den UnitPrice skalaren Eingabeparameter zu übergeben, übergeben wir stattdessen die gesamte ProductsRow Instanz:

<asp:Label ID="UnitPriceLabel" runat="server"
    Text='<%# DisplayPrice((Northwind.ProductsRow)
          ((System.Data.DataRowView) Container.DataItem).Row) %>'>
</asp:Label>

Nachdem die Aufrufe der Formatierungsfunktionen eingefügt wurden, nehmen Sie sich einen Moment Zeit, um unseren Fortschritt in einem Browser anzusehen. Ihr Bildschirm sollte ähnlich wie in Abbildung 5 aussehen, wobei die eingestellten Produkte den Text [EINGESTELLT] enthalten und bei den Produkten, die mehr als 20,00 $ kosten, der Preis durch den Text Bitte rufen Sie für ein Preisangebot an ersetzt wurde.

Screenshot mit Produkten, die im DataList-Steuerelement aufgeführt sind, wobei der Preis der Produkte, die mehr als 20,00 $ kosten, durch den Text

Abbildung 5: Für teure Produkte wird der Preis durch den Text ersetzt. Bitte rufen Sie ein Preisangebot an (Klicken Sie hier, um das Bild mit voller Größe anzuzeigen)

Zusammenfassung

Das Formatieren des Inhalts eines DataList- oder Repeater-Steuerelements basierend auf den Daten kann mit zwei Techniken erfolgen. Die erste Technik besteht darin, einen Ereignishandler für das ItemDataBound-Ereignis zu erstellen, der ausgelöst wird, wenn jeder Datensatz in der Datenquelle an eine neue DataListItem oder RepeaterItem gebunden wird. ItemDataBound Im Ereignishandler können die Daten des aktuellen Elements untersucht werden, um anschließend Formatierungen auf den Inhalt der Vorlage oder für DataListItem s auf das gesamte Element selbst anzuwenden.

Alternativ können benutzerdefinierte Formatierungen über Formatierungsfunktionen realisiert werden. Eine Formatierungsfunktion ist eine Methode, die aus den Vorlagen "DataList" oder "Repeater" aufgerufen werden kann, die den HTML-Code zurückgibt, der an seiner Stelle ausgegeben werden soll. Häufig wird der von einer Formatierungsfunktion zurückgegebene HTML-Code durch die Werte bestimmt, die an das aktuelle Element gebunden werden. Diese Werte können an die Formatierungsfunktion übergeben werden, entweder als skalare Werte oder durch Übergeben des gesamten Objekts, das an das Element gebunden wird (z. B. die ProductsRow Instanz).

Glückliche Programmierung!

Zum Autor

Scott Mitchell, Autor von sieben ASP/ASP.NET Büchern und Gründer von 4GuysFromRolla.com, arbeitet seit 1998 mit Microsoft Web Technologies zusammen. Scott arbeitet als unabhängiger Berater, Trainer und Schriftsteller. Sein neuestes Buch ist Sams Teach Yourself ASP.NET 2.0 in 24 Stunden. Er kann bei mitchell@4GuysFromRolla.comerreicht werden.

Besonderer Dank an

Diese Lernprogrammreihe wurde von vielen hilfreichen Prüfern überprüft. Leitende Prüfer für dieses Lernprogramm waren Yaakov Ellis, Randy Schmidt und Liz Shulok. Möchten Sie meine bevorstehenden MSDN-Artikel überprüfen? Wenn dies der Fall ist, schreiben Sie mir an mitchell@4GuysFromRolla.com.