Freigeben über


Formatieren der DataList und des Repeaters anhand von Daten (C#)

von Scott Mitchell

PDF herunterladen

In diesem Tutorial gehen wir schrittweise durch Beispiele, wie wir das Aussehen der DataList- und Repeater-Steuerelemente formatieren, entweder mithilfe von Formatierungsfunktionen innerhalb von Vorlagen oder durch das Bearbeiten des DataBound-Ereignisses.

Einleitung

Wie wir im vorherigen Lernprogramm gesehen haben, bietet die DataList eine Reihe von stilbezogenen Eigenschaften, die sich auf ihre Darstellung auswirken. 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 weiterer stilbezogener Eigenschaften, wie z. B. Font, ForeColor, BackColor und BorderWidth, um einige zu nennen. Das Repeater-Steuerelement enthält keine stilbezogenen Eigenschaften. Diese Formatvorlageneinstellungen müssen direkt innerhalb des Markups in den Repeater-Vorlagen 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 Tutorial "Verwendung von TemplateFields im GridView-Steuerelement" untersucht.

Beide Formatierungstechniken sind mit den DataList- und Repeater-Steuerelementen verfügbar. In dieser Anleitung gehen wir Schritt für Schritt durch Beispiele für beide Techniken und beide Steuerelemente.

Verwenden desItemDataBoundEreignishandlers

Wenn Daten an eine DataList gebunden sind, entweder aus einem Datenquellensteuerelement oder durch programmgesteuertes Zuweisen von Daten zur Eigenschaft des Steuerelements DataSource und Aufrufen seiner DataBind() Methode, wird das DataList-Ereignis DataBinding ausgelöst, die Datenquelle aufgezählt, und jeder Datensatz ist 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 DataListItem gebunden wurde.

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. Binde den Datensatz an DataListItem
    4. Auslösen des EreignissesItemDataBound
    5. Fügen Sie DataListItem zur Items Sammlung hinzu

Beim Binden von Daten an das Repeater-Steuerelement schreitet es durch die exakt gleiche Abfolge von Schritten fort. Der einzige Unterschied besteht darin, dass der Repeater anstelle von erstellten DataListItem Instanzen RepeaterItem verwendet.

Hinweis

Der aufmerksame Leser hat möglicherweise eine leichte Anomalie zwischen der Abfolge der Schritte bemerkt, die auftreten, wenn die DataList und der Repeater an Daten gebunden sind, im Gegensatz dazu, wenn die GridView an Daten gebunden ist. 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-Zeitrahmen erstellt wurden, bevor das "Vorher- und Nachher-Ereignishandlermuster" gebräuchlich 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 prüft die gerade an das DataListItem oder RepeaterItem gebundenen Daten 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 formatbezogenen Eigenschaften implementiert werden, darunter die Standard Font, ForeColor, BackColor, CssClass und so weiter. Um die Formatierung bestimmter Websteuerungselemente innerhalb der DataList-Vorlage zu beeinflussen, müssen wir programmatisch auf diese Websteuerungselemente zugreifen und deren Stil ändern. Wir haben gesehen, wie dies im Lernprogramm " Benutzerdefinierte Formatierung basierend auf Daten " wieder möglich ist. Wie das Repeater-Steuerelement verfügt die RepeaterItem Klasse über keine formatbezogenen Eigenschaften. Daher müssen alle an einem RepeaterItem Ereignishandler ItemDataBound vorgenommenen Formatvorlagenänderungen programmgesteuert auf Websteuerelemente innerhalb der Vorlage zugreifen und diese aktualisieren.

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, in der der Name, die Kategorie, der Lieferant, die Menge pro Einheit und der Preis jedes Produkts angezeigt wurden. 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 in ein aussagekräftigeres 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 void ItemDataBoundFormattingExample_ItemDataBound
    (object sender, DataListItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item ||
        e.Item.ItemType == ListItemType.AlternatingItem)
    {
        // Programmatically reference the ProductsRow instance bound
        // to this DataListItem
        Northwind.ProductsRow product =
            (Northwind.ProductsRow)((System.Data.DataRowView)e.Item.DataItem).Row;
        // See if the UnitPrice is not NULL and less than $20.00
        if (!product.IsUnitPriceNull() && product.UnitPrice < 20)
        {
            // TODO: Highlight the product's name and price
        }
    }
}

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 feuert, werden die an Daten gebundenen DataListItem über e.Item an den entsprechenden Ereignishandler übergeben (anstelle von e.Row, wie beim Ereignishandler des GridViews RowDataBound). 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 Datenelemente 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 DataListItemDataItem-Eigenschaft enthält einen Verweis auf das DataRowView-Objekt, dessen Row-Eigenschaft einen Verweis auf das tatsächliche ProductsRow-Objekt bereitstellt.

Als Nächstes überprüfen wir die Eigenschaft der ProductsRow Instanz UnitPrice . Da das Feld der Tabelle "Products" UnitPrice Werte zulässt, sollten wir zunächst überprüfen, ob die NULL-Eigenschaft einen UnitPrice Wert hat, indem wir die NULL Methode verwenden. 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 wir wissen, dass der Preis eines Produkts weniger als 20,00 $ beträgt, bleibt nur noch, seinen Namen und Preis hervorzuheben. Um dies zu erreichen, müssen wir zunächst programmgesteuert auf die Label-Steuerelemente im ItemTemplate verweisen, die den Namen und den Preis des Produkts anzeigen. Als Nächstes müssen sie einen gelben Hintergrund anzeigen. Diese Formatierungsinformationen können angewendet werden, indem die Eigenschaften der Labels BackColor direkt geändert werden (LabelID.BackColor = Color.Yellow); im Idealfall sollten jedoch alle anzeigebezogenen Aspekte durch Cascading 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.

Wenn Sie die Formatierung anwenden möchten, legen Sie einfach die Eigenschaften der beiden Label-Websteuerelemente CssClass auf AffordablePriceEmphasis fest, wie im folgenden Code dargestellt:

// Highlight the product name and unit price Labels
// First, get a reference to the two Label Web controls
Label ProductNameLabel = (Label)e.Item.FindControl("ProductNameLabel");
Label UnitPriceLabel = (Label)e.Item.FindControl("UnitPriceLabel");
// Next, set their CssClass properties
if (ProductNameLabel != null)
    ProductNameLabel.CssClass = "AffordablePriceEmphasis";
if (UnitPriceLabel != null)
    UnitPriceLabel.CssClass = "AffordablePriceEmphasis";

Nachdem der ItemDataBound Ereignishandler abgeschlossen wurde, rufen Sie die Formatting.aspx Seite erneut in einem Browser auf. 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 das gesamte Element gelb hervorheben möchten, wenn der Preis kleiner als 20,00 $ ist, könnten wir den Code, der auf die Bezeichnungen verweist, durch die folgende Codezeile ersetzen und deren CssClass Eigenschaften festlegen: e.Item.CssClass = "AffordablePriceEmphasis" (siehe Abbildung 3).

Die RepeaterItem, aus denen das Repeater-Steuerelement besteht, bieten jedoch keine solchen stilorientierten Eigenschaften. Daher erfordert das Anwenden von benutzerdefinierter Formatierung auf den Repeater die Zuweisung von Stil-Eigenschaften zu den Websteuerelementen innerhalb der Vorlagen des Repeaters, so wie wir es in Abbildung 2 gemacht haben.

Das gesamte Produkt ist 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, sollen die Produktinformationen den Text [EINGESTELLT] neben dem Namen des Produkts enthalten, wenn das Produkt 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 eines DataList-Steuerelements, das Produkte auflistet, wobei der Preis für Produkte, die mehr als 20,00 $ kosten, durch den Text "Bitte kontaktieren Sie uns für ein Preisangebot" ersetzt wird.

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 string DisplayProductNameAndDiscontinuedStatus
    (string productName, bool discontinued)
{
    // Return just the productName if discontinued is false
    if (!discontinued)
        return productName;
    else
        // otherwise, return the productName appended with the text "[DISCONTINUED]"
        return string.Concat(productName, " [DISCONTINUED]");
}
protected string DisplayPrice(Northwind.ProductsRow product)
{
    // If price is less than $20.00, return the price, highlighted
    if (!product.IsUnitPriceNull() && product.UnitPrice < 20)
        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>";
}

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 werden 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 Vorsicht bei der Behandlung dieser skalaren Eingaben walten.

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 string DisplayPrice(object unitPrice)
{
    // If price is less than $20.00, return the price, highlighted
    if (!Convert.IsDBNull(unitPrice) && ((decimal) unitPrice) < 20)
        return string.Concat("<span class=\"AffordablePriceEmphasis\">",
                              ((decimal) unitPrice).ToString("C"), "</span>");
    else
        // Otherwise return the text, "Please call for a price quote"
        return "<span>Please call for a price quote</span>";
}

Beachten Sie, dass der unitPrice Eingabeparameter vom Typ Object ist und dass die bedingte Anweisung 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 unserer Code-Behind-Klasse der ASP.NET-Seite hinzugefügten Formatierungsfunktionen bleibt nur noch, diese Formatierungsfunktionen von der DataList's 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-Steuerelement derzeit den Namen des Produkts an, indem seiner Text-Eigenschaft das Ergebnis von <%# Eval("ProductName") %> zugewiesen wird. Damit der Name und der Text [EINGESTELLT] angezeigt werden, aktualisieren Sie die deklarative Syntax bei Bedarf, damit sie stattdessen der Text Eigenschaft den 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 beim Anzeigen des Produktnamens und des Textes „[EINGESTELLT]“ 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>

Wenn die Aufrufe der Formatierungsfunktionen vorhanden sind, nehmen Sie sich einen Moment Zeit, um unseren Fortschritt in einem Browser anzuzeigen. Ihr Bildschirm sollte ähnlich aussehen wie in Abbildung 5, wobei die eingestellten Produkte mit dem Text [EINGESTELLT] versehen sind und Produkte, deren Preis über 20,00 $ liegt, durch den Text Bitte rufen Sie für ein Preisangebot an ersetzt werden.

Screenshot mit Produkten, die im DataList-Steuerelement aufgeführt sind. Für Produkte, die mehr als 20,00 $ kosten, wird der Preis 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 mit einer neuen DataListItem oder RepeaterItem verbunden wird. ItemDataBound Im Ereignishandler können die Daten des aktuellen Elements untersucht werden, und anschließend kann die Formatierung auf den Inhalt der Vorlage oder bei DataListItem s auf das gesamte Element selbst angewendet werden.

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 eine Nachricht an mitchell@4GuysFromRolla.com.