Share via


Master-/Detailfilterung über zwei Seiten mit einem Repeater-Steuerelement und DataList (C#)

von Scott Mitchell

PDF herunterladen

In diesem Tutorial erfahren Sie, wie Sie einen master-/Detailbericht auf zwei Seiten trennen. Auf der Seite "master" verwenden wir ein Repeater-Steuerelement, um eine Liste von Kategorien zu rendern, die den Benutzer beim Klicken auf die Seite "Details" bringt, auf der eine zweispaltige DataList die Produkte anzeigt, die zur ausgewählten Kategorie gehören.

Einführung

Im vorherigen Tutorial haben wir gezeigt, wie Sie master-/Detailberichte auf einer einzelnen Webseite mithilfe von DropDownLists anzeigen, um die Datensätze "master" und eine DataList-Liste anzuzeigen, um die "Details" anzuzeigen. Ein weiteres gängiges Muster für master-/Detailberichte besteht darin, dass die master Datensätze auf einer Webseite und die Details auf einer anderen seite vorhanden sind. Im vorherigen Tutorial Master-/Detailfilterung über zwei Seiten haben wir dieses Muster mithilfe einer GridView untersucht, um alle Lieferanten im System anzuzeigen. Diese GridView enthält ein HyperLinkField, das als Link zu einer zweiten Seite gerendert wird und in SupplierID der Abfragezeichenfolge übergeben wird. Auf der zweiten Seite wurde eine GridView verwendet, um die vom ausgewählten Lieferanten bereitgestellten Produkte aufzulisten.

Solche zweiseitigen master/Detailberichte können auch mithilfe von DataList- und Repeater-Steuerelementen ausgeführt werden. Der einzige Unterschied besteht darin, dass weder die DataList noch der Repeater Unterstützung für das HyperLinkField-Steuerelement bieten. Stattdessen müssen wir ein HyperLink-Websteuerelement oder ein Anker-HTML-Element (<a>) innerhalb des Steuerelements ItemTemplatehinzufügen. Die HyperLink-Eigenschaft NavigateUrl oder das Attribut des Ankers href kann dann mithilfe deklarativer oder programmgesteuerter Ansätze angepasst werden.

In diesem Tutorial untersuchen wir ein Beispiel, das die Kategorien in einer Aufzählungsliste auf einer Seite mit einem Repeater-Steuerelement auflistet. Jedes Listenelement enthält den Namen und die Beschreibung der Kategorie, wobei der Kategoriename als Link zu einer zweiten Seite angezeigt wird. Wenn Sie auf diesen Link klicken, gelangen Sie zur zweiten Seite, auf der eine DataList die Produkte anzeigt, die zur ausgewählten Kategorie gehören.

Schritt 1: Anzeigen der Kategorien in einer Aufzählung

Der erste Schritt beim Erstellen eines master-/Detailberichts besteht darin, mit der Anzeige der "master"-Datensätze zu beginnen. Daher besteht unsere erste Aufgabe darin, die Kategorien auf der Seite "master" anzuzeigen. Öffnen Sie die CategoryListMaster.aspx Seite im DataListRepeaterFiltering Ordner, fügen Sie ein Repeater-Steuerelement hinzu, und fügen Sie über das Smarttag eine neue ObjectDataSource hinzu. Konfigurieren Sie die neue ObjectDataSource so, dass sie über die Methode der Klasse GetCategories auf ihre CategoriesBLL Daten zugreift (siehe Abbildung 1).

Konfigurieren der ObjectDataSource für die Verwendung der GetCategories-Methode der CategoriesBLL-Klasse

Abbildung 1: Konfigurieren der ObjectDataSource für die Verwendung der -Methode der CategoriesBLL Klasse GetCategories (Klicken Sie hier, um das bild in voller Größe anzuzeigen)

Definieren Sie als Nächstes die Vorlagen des Repeaters so, dass jeder Kategoriename und jede Beschreibung als Element in einer Aufzählung angezeigt wird. Wir müssen uns noch keine Gedanken darüber machen, dass jeder Kategorielink zur Detailseite angezeigt wird. Im Folgenden wird das deklarative Markup für den Repeater und ObjectDataSource veranschaulicht:

<asp:Repeater ID="Repeater1" runat="server" DataSourceID="ObjectDataSource1"
    EnableViewState="False">
    <HeaderTemplate>
        <ul>
    </HeaderTemplate>
 
    <ItemTemplate>
        <li><%# Eval("CategoryName") %> - <%# Eval("Description") %></li>
    </ItemTemplate>
 
    <FooterTemplate>
        </ul>
    </FooterTemplate>
</asp:Repeater>
 
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
    OldValuesParameterFormatString="original_{0}"
    SelectMethod="GetCategories" TypeName="CategoriesBLL">
</asp:ObjectDataSource>

Wenn dieses Markup abgeschlossen ist, nehmen Sie sich einen Moment Zeit, um unseren Fortschritt über einen Browser anzuzeigen. Wie Abbildung 2 zeigt, wird der Repeater als Aufzählungsliste gerendert, die den Namen und die Beschreibung jeder Kategorie anzeigt.

Jede Kategorie wird als Listenelement mit Aufzählungszeichen angezeigt.

Abbildung 2: Jede Kategorie wird als Aufzählungselement angezeigt (Klicken Sie hier, um das Bild in voller Größe anzuzeigen).

Damit ein Benutzer die "Details"-Informationen für eine bestimmte Kategorie anzeigen kann, müssen wir jedem Aufzählungselement einen Link hinzufügen, der den Benutzer beim Klicken auf die zweite Seite (ProductsForCategoryDetails.aspx) bringt. Auf dieser zweiten Seite werden dann die Produkte für die ausgewählte Kategorie mithilfe einer DataList angezeigt. Um die Kategorie zu ermitteln, auf deren Link geklickt wurde, müssen wir die angeklickten Kategorien CategoryID über einen Mechanismus an die zweite Seite übergeben. Die einfachste und einfachste Möglichkeit zum Übertragen skalarer Daten von einer Seite auf eine andere ist die Abfragezeichenfolge, die in diesem Tutorial verwendet wird. Insbesondere erwartet die ProductsForCategoryDetails.aspx Seite, dass der ausgewählte categoryID Wert über ein Abfragezeichenfolgenfeld mit dem Namen CategoryIDübergeben wird. Um beispielsweise die Produkte für die Kategorie Getränke anzuzeigen, die eine CategoryID von 1 aufweist, würde ein Benutzer besuchen ProductsForCategoryDetails.aspx?CategoryID=1.

Um einen Link für jedes Aufzählungselement im Repeater zu erstellen, müssen sie entweder ein HyperLink-Websteuerelement oder ein HTML-Ankerelement (<a>) hinzufügen ItemTemplate. In Szenarien, in denen der Hyperlink für jede Zeile gleich angezeigt wird, reicht jeder Ansatz aus. Für Repeater bevorzuge ich das Ankerelement. Um das Ankerelement zu verwenden, aktualisieren Sie die ItemTemplate des Repeaters auf:

<li>
    <a href='ProductsForCategoryDetails.aspx?CategoryID=<%# Eval("CategoryID") %>'>
        <%# Eval("CategoryName") %>
    </a> - <%# Eval("Description") %>
</li>

Beachten Sie, dass der CategoryID direkt in das Attribut des Ankerelements href eingefügt werden kann. Stellen Sie jedoch sicher, dass der Wert des href Attributs durch Apostrophe (und Anführungszeichen) begrenzt wird, da die Eval -Methode innerhalb des href Attributs ihre Zeichenfolge ("CategoryID") mit Anführungszeichen begrenzt. Alternativ kann stattdessen ein HyperLink-Websteuerelement verwendet werden:

<li>
    <asp:HyperLink runat="server" Text='<%# Eval("CategoryName") %>'
        NavigateUrl='<%# "ProductsForCategoryDetails.aspx?CategoryID=" &
            Eval("CategoryID") %>'>
    </asp:HyperLink>
    - <%# Eval("Description") %>
</li>

Beachten Sie, wie der statische Teil der URL — ProductsForCategoryDetails.aspx?CategoryID direkt innerhalb der Datenbindungssyntax mithilfe von Eval("CategoryID") Zeichenfolgenverkettung an das Ergebnis angefügt wird.

Ein Vorteil der Verwendung des HyperLink-Steuerelements ist, dass bei Bedarf programmgesteuert über den Ereignishandler des ItemDataBound Repeaters darauf zugegriffen werden kann. Beispielsweise können Sie den Kategorienamen als Text und nicht als Link für Kategorien ohne zugeordnete Produkte anzeigen. Eine solche Überprüfung kann programmgesteuert im ItemDataBound Ereignishandler durchgeführt werden. Für Kategorien ohne zugehörige Produkte könnte die HyperLink-Eigenschaft NavigateUrl auf eine leere Zeichenfolge festgelegt werden, was dazu führt, dass dieser bestimmte Kategoriename als Nur-Text (statt als Link) gerendert wird. Weitere Informationen zum Formatieren der DataList- und Repeater-Inhalte basierend auf Daten finden Sie im Tutorial Formatieren der DataList und des Repeaters basierend auf programmgesteuerter Logik über den ItemDataBound Ereignishandler.

Wenn Sie folgen, können Sie entweder das Ankerelement oder den HyperLink-Steuerelementansatz auf Ihrer Seite verwenden. Unabhängig vom Ansatz sollte beim Anzeigen der Seite über einen Browser jeder Kategoriename als Link zu gerendert werden, indem ProductsForCategoryDetails.aspxder entsprechende CategoryID Wert übergeben wird (siehe Abbildung 3).

Die Kategorienamen verknüpfen jetzt mit ProductsForCategoryDetails.aspx

Abbildung 3: Die Kategorienamen jetzt mit ProductsForCategoryDetails.aspx verknüpfen (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)

Schritt 3: Auflisten der Produkte, die zur ausgewählten Kategorie gehören

Nachdem die CategoryListMaster.aspx Seite abgeschlossen ist, sind wir bereit, unsere Aufmerksamkeit auf die Implementierung der Seite "Details" ProductsForCategoryDetails.aspxzu richten. Öffnen Sie diese Seite, ziehen Sie eine DataList aus der Toolbox auf die Designer, und legen Sie die ID -Eigenschaft auf festProductsInCategory. Wählen Sie als Nächstes aus dem Smarttag der DataList aus, um der Seite eine neue ObjectDataSource hinzuzufügen, und nennen Sie sie ProductsInCategoryDataSource. Konfigurieren Sie sie so, dass die Methode der ProductsBLL Klasse GetProductsByCategoryID(categoryID) aufgerufen wird. Legen Sie die Dropdownlisten in den Registerkarten INSERT, UPDATE und DELETE auf (Keine) fest.

Konfigurieren der ObjectDataSource für die Verwendung der GetProductsByCategoryID(categoryID)-Methode der ProductsBLL-Klasse

Abbildung 4: Konfigurieren der ObjectDataSource für die Verwendung der Methode der ProductsBLL Klasse GetProductsByCategoryID(categoryID) (Klicken Sie hier, um das bild in voller Größe anzuzeigen)

Da die GetProductsByCategoryID(categoryID) Methode einen Eingabeparameter akzeptiert (categoryID), bietet uns der Assistent Datenquelle auswählen die Möglichkeit, die Quelle des Parameters anzugeben. Legen Sie die Parameterquelle mithilfe von QueryStringField auf QueryString fest CategoryID.

Verwenden der Querystring Field CategoryID als Quelle des Parameters

Abbildung 5: Verwenden Sie das Querystring-Feld CategoryID als Quelle des Parameters (Klicken Sie hier, um das bild in voller Größe anzuzeigen)

Wie wir in den vorherigen Tutorials gesehen haben, erstellt Visual Studio nach Abschluss des Assistenten Datenquelle auswählen automatisch einen ItemTemplate für die DataList, in dem jeder Datenfeldname und -wert aufgelistet ist. Ersetzen Sie diese Vorlage durch eine Vorlage, die nur den Namen, den Lieferanten und den Preis des Produkts auflistet. Legen Sie außerdem die DataList-Eigenschaft RepeatColumns auf 2 fest. Nach diesen Änderungen sollte das deklarative Markup Von DataList und ObjectDataSource wie folgt aussehen:

<asp:DataList ID="ProductsInCategory" runat="server" DataKeyField="ProductID"
    RepeatColumns="2" DataSourceID="ProductsInCategoryDataSource"
    EnableViewState="False">
    <ItemTemplate>
        <h5><%# Eval("ProductName") %></h5>
        <p>
            Supplied by <%# Eval("SupplierName") %><br />
            <%# Eval("UnitPrice", "{0:C}") %>
        </p>
    </ItemTemplate>
</asp:DataList>
 
<asp:ObjectDataSource ID="ProductsInCategoryDataSource"
    OldValuesParameterFormatString="original_{0}" runat="server"
    SelectMethod="GetProductsByCategoryID" TypeName="ProductsBLL">
    <SelectParameters>
        <asp:QueryStringParameter Name="categoryID" QueryStringField="CategoryID"
            Type="Int32" />
    </SelectParameters>
</asp:ObjectDataSource>

Um diese Seite in Aktion anzuzeigen, beginnen Sie von der CategoryListMaster.aspx Seite. Klicken Sie als Nächstes auf einen Link in der Liste Kategorien mit Aufzählungszeichen. Dies führt Sie zu ProductsForCategoryDetails.aspx, indem Sie die CategoryID Abfragezeichenfolge durchlaufen. Die ProductsInCategoryDataSource ObjectDataSource in ProductsForCategoryDetails.aspx ruft dann nur diese Produkte für die angegebene Kategorie ab und zeigt sie in der DataList an, wodurch zwei Produkte pro Zeile gerendert werden. Abbildung 6 zeigt einen Screenshot der Anzeige der ProductsForCategoryDetails.aspx Getränke.

Die Getränke werden angezeigt, zwei pro Zeile

Abbildung 6: Die Getränke werden angezeigt, zwei pro Zeile (Klicken Sie hier, um das bild in voller Größe anzuzeigen)

Schritt 4: Anzeigen von Kategorieinformationen auf ProductsForCategoryDetails.aspx

Wenn ein Benutzer auf eine Kategorie in CategoryListMaster.aspxklickt, wird er zu ProductsForCategoryDetails.aspx den Produkten weitergeleitet, die zur ausgewählten Kategorie gehören. Es gibt jedoch keine visuellen Hinweise darauf, ProductsForCategoryDetails.aspx welche Kategorie ausgewählt wurde. Ein Benutzer, der auf Getränke klicken wollte, aber versehentlich auf Würzmittel geklickt hat, hat keine Möglichkeit, seinen Fehler zu erkennen, sobald er erreicht ProductsForCategoryDetails.aspx. Um dieses potenzielle Problem zu beheben, können wir oben auf der Seite Informationen zur ausgewählten Kategorie anzeigen – ihren Namen und ihre ProductsForCategoryDetails.aspx Beschreibung.

Fügen Sie dazu eine FormView über dem Repeater-Steuerelement in ProductsForCategoryDetails.aspxhinzu. Fügen Sie als Nächstes der Seite aus dem Smarttag CategoryDataSource der FormView eine neue ObjectDataSource hinzu, und konfigurieren Sie es so, dass die Methode der CategoriesBLL Klasse GetCategoryByCategoryID(categoryID) verwendet wird.

Zugreifen auf Informationen zur Kategorie über die GetCategoryByCategoryID(categoryID)-Methode der CategoriesBLL-Klasse

Abbildung 7: Zugreifen auf Informationen zur Kategorie über die Methode der CategoriesBLL Klasse GetCategoryByCategoryID(categoryID) (Klicken Sie hier, um das bild in voller Größe anzuzeigen)

Wie bei der ProductsInCategoryDataSource in Schritt 3 hinzugefügten ObjectDataSource fordert uns der CategoryDataSourceAssistent Datenquelle konfigurieren nach einer Quelle für den Eingabeparameter der GetCategoryByCategoryID(categoryID) Methode auf. Verwenden Sie die gleichen Einstellungen wie zuvor, und legen Sie die Parameterquelle auf QueryString und den QueryStringField-Wert auf fest CategoryID (siehe Abbildung 5).

Nach Abschluss des Assistenten erstellt Visual Studio automatisch ein ItemTemplate, EditItemTemplateund InsertItemTemplate für die FormView. Da wir eine schreibgeschützte Benutzeroberfläche bereitstellen, können Sie und EditItemTemplateInsertItemTemplateentfernen. Außerdem können Sie die FormView anpassen ItemTemplate. Nach dem Entfernen der überflüssigen Vorlagen und dem Anpassen der ItemTemplate sollte das deklarative Markup Ihres FormView- und ObjectDataSource-Markups wie folgt aussehen:

<asp:FormView ID="FormView1" runat="server" DataKeyNames="CategoryID"
    DataSourceID="CategoryDataSource" EnableViewState="False" Width="100%">
    <ItemTemplate>
        <h3>
            <asp:Label ID="CategoryNameLabel" runat="server"
                Text='<%# Bind("CategoryName") %>' />
        </h3>
        <p>
            <asp:Label ID="DescriptionLabel" runat="server"
                Text='<%# Bind("Description") %>' />
        </p>
    </ItemTemplate>
</asp:FormView>
 
<asp:ObjectDataSource ID="CategoryDataSource" runat="server"
    OldValuesParameterFormatString="original_{0}"
    SelectMethod="GetCategoryByCategoryID" TypeName="CategoriesBLL">
    <SelectParameters>
        <asp:QueryStringParameter Name="categoryID" Type="Int32"
            QueryStringField="CategoryID" />
    </SelectParameters>
</asp:ObjectDataSource>

Abbildung 8 zeigt einen Screenshot beim Anzeigen dieser Seite über einen Browser.

Hinweis

Zusätzlich zur FormView habe ich auch ein HyperLink-Steuerelement über der FormView hinzugefügt, das den Benutzer zurück in die Liste der Kategorien (CategoryListMaster.aspx) bringt. Sie können diesen Link an anderer Stelle platzieren oder ganz weglassen.

Kategorieinformationen werden jetzt oben auf der Seite angezeigt.

Abbildung 8: Kategorieinformationen werden jetzt oben auf der Seite angezeigt (Klicken Sie hier, um das bild in voller Größe anzuzeigen)

Schritt 5: Anzeigen einer Meldung, wenn keine Produkte zur ausgewählten Kategorie gehören

Die CategoryListMaster.aspx Seite listet alle Kategorien im System auf, unabhängig davon, ob es zugehörige Produkte gibt. Wenn ein Benutzer auf eine Kategorie ohne zugehörige Produkte klickt, wird die DataList in ProductsForCategoryDetails.aspx nicht gerendert, da die Datenquelle keine Elemente enthält. Wie wir in früheren Tutorials gesehen haben, stellt GridView eine EmptyDataText Eigenschaft bereit, die verwendet werden kann, um eine TEXTnachricht anzugeben, die angezeigt werden soll, wenn keine Datensätze in der Datenquelle vorhanden sind. Leider verfügt weder die DataList noch der Repeater über eine solche Eigenschaft.

Um eine Meldung anzuzeigen, die den Benutzer darüber informiert, dass es keine übereinstimmenden Produkte für die ausgewählte Kategorie gibt, müssen wir ein Label-Steuerelement zur Seite hinzufügen, deren Text Eigenschaft die Meldung zugewiesen ist, die angezeigt werden soll, falls keine übereinstimmenden Produkte vorhanden sind. Anschließend müssen wir die Eigenschaft programmgesteuert festlegen Visible , je nachdem, ob die DataList Elemente enthält oder nicht.

Um dies zu erreichen, fügen Sie zunächst eine Bezeichnung unter der DataList hinzu. Legen Sie die ID -Eigenschaft auf NoProductsMessage und die Text -Eigenschaft auf "Es gibt keine Produkte für die ausgewählte Kategorie..." fest. Als Nächstes Visible müssen wir die Eigenschaft dieser Bezeichnung programmgesteuert festlegen, basierend darauf, ob Daten an die ProductsInCategory DataList gebunden waren oder nicht. Diese Zuweisung muss erfolgen, nachdem die Daten an die DataList gebunden wurden. Für GridView, DetailsView und FormView könnten wir einen Ereignishandler für das Ereignis des Steuerelements DataBound erstellen, der nach Abschluss der Datenbindung ausgelöst wird. Weder für dataList noch für den Repeater ist jedoch ein DataBound Ereignis verfügbar.

In diesem speziellen Beispiel können wir die Label-Eigenschaft Visible im Page_Load Ereignishandler zuweisen, da die Daten der DataList vor dem Ereignis der Seite Load zugewiesen wurden. Dieser Ansatz funktioniert jedoch im allgemeinen Fall nicht, da die Daten aus der ObjectDataSource später im Lebenszyklus der Seite möglicherweise an die DataList gebunden werden. Wenn die angezeigten Daten beispielsweise auf dem Wert in einem anderen Steuerelement basieren, z. B. beim Anzeigen eines master-/Detailberichts mithilfe einer DropDownList zum Speichern der "master"-Datensätze, werden die Daten möglicherweise erst in der Phase des Lebenszyklus der Seite an das PreRender Datenwebsteuerelement zurückgegeben.

Eine Lösung, die für alle Fälle funktioniert, besteht darin, die Visible -Eigenschaft im DataList-Ereignishandler ItemDataBound (oder ItemCreated) zuzuweisenFalse, wenn ein Elementtyp von Item oder AlternatingItemgebunden wird. In einem solchen Fall wissen wir, dass mindestens ein Datenelement in der Datenquelle vorhanden ist und daher die NoProductsMessage Bezeichnung ausgeblendet werden kann. Zusätzlich zu diesem Ereignishandler benötigen wir auch einen Ereignishandler für das DataList-Ereignis DataBinding , bei dem wir die Label-Eigenschaft Visible mit Trueinitialisieren. Da das DataBinding Ereignis vor den ItemDataBound Ereignissen ausgelöst wird, wird die Label-Eigenschaft Visible zunächst auf Truefestgelegt. Wenn Datenelemente vorhanden sind, wird sie jedoch auf Falsefestgelegt. Der folgende Code implementiert diese Logik:

protected void ProductsInCategory_DataBinding(object sender, EventArgs e)
{
    // Show the Label
    NoProductsMessage.Visible = true;
}
 
protected void ProductsInCategory_ItemDataBound(object sender, DataListItemEventArgs e)
{
    // If we have a data item, hide the Label
    if (e.Item.ItemType == ListItemType.Item ||
        e.Item.ItemType == ListItemType.AlternatingItem)
        NoProductsMessage.Visible = false;
}

Alle Kategorien in der Northwind-Datenbank sind einem oder mehreren Produkten zugeordnet. Um dieses Feature zu testen, habe ich die Northwind-Datenbank für dieses Tutorial manuell angepasst und alle Produkte, die der Kategorie Produkte (CategoryID = 7) zugeordnet sind, der Kategorie Meeresfrüchte (CategoryID = 8) neu zugewiesen. Dies kann über die Server-Explorer erreicht werden, indem Sie Neue Abfrage auswählen und die folgende UPDATE Anweisung verwenden:

UPDATE Products SET
    CategoryID = 8
WHERE CategoryID = 7

Nachdem Sie die Datenbank entsprechend aktualisiert haben, kehren Sie zur CategoryListMaster.aspx Seite zurück, und klicken Sie auf den Link Erstellen. Da es keine Produkte mehr gibt, die zur Kategorie Produkte gehören, sollte die Option "Es gibt keine Produkte für die ausgewählte Kategorie..." angezeigt werden. -Meldung, wie in Abbildung 9 dargestellt.

Eine Meldung wird angezeigt, wenn keine Produkte zur ausgewählten Kategorie gehören.

Abbildung 9: Eine Meldung wird angezeigt, wenn keine Produkte zur ausgewählten Kategorie gehören (Klicken Sie, um das Bild in voller Größe anzuzeigen)

Zusammenfassung

Während master-/Detailberichte sowohl die master- als auch Detaildatensätze auf einer einzelnen Seite anzeigen können, sind sie auf vielen Websites auf zwei Webseiten getrennt. In diesem Tutorial haben wir uns mit der Implementierung eines solchen master-/Detailberichts befasst, indem die Kategorien in einer Aufzählungsliste mit einem Repeater auf der "master"-Webseite und den zugehörigen Produkten auf der Seite "Details" aufgeführt sind. Jedes Listenelement auf der master-Webseite enthielt einen Link zur Detailseite, die den Zeilenwert CategoryID übergeben hat.

Auf der Detailseite wurde das Abrufen dieser Produkte für den angegebenen Lieferanten über die Methode der ProductsBLL Klasse GetProductsByCategoryID(categoryID) durchgeführt. Der categoryID Parameterwert wurde deklarativ unter Verwendung des CategoryID Querystring-Werts als Parameterquelle angegeben. Außerdem wurde untersucht, wie Sie Kategoriedetails auf der Detailseite mithilfe einer FormView anzeigen und eine Meldung anzeigen, wenn keine Produkte zur ausgewählten Kategorie gehören.

Viel Spaß beim Programmieren!

Zum Autor

Scott Mitchell, Autor von sieben ASP/ASP.NET-Büchern und Gründer von 4GuysFromRolla.com, arbeitet seit 1998 mit Microsoft-Webtechnologien. Scott arbeitet als unabhängiger Berater, Trainer und Autor. Sein neuestes Buch ist Sams Teach Yourself ASP.NET 2.0 in 24 Stunden. Er kann unter mitchell@4GuysFromRolla.comoder über seinen Blog erreicht werden, der unter http://ScottOnWriting.NETzu finden ist.

Besonderen Dank an...

Diese Tutorialreihe wurde von vielen hilfreichen Prüfern überprüft. Hauptprüfer für dieses Tutorial waren Zack Jones und Liz Shulok. Möchten Sie meine anstehenden MSDN-Artikel lesen? Wenn dies der Fall ist, legen Sie eine Zeile unter abmitchell@4GuysFromRolla.com.