Master-/Detailbericht unter Verwendung eines auswählbaren GridView-Mastersteuerelements mit einem DetailView-Detailsteuerelement (C#)
von Scott Mitchell
Dieses Tutorial enthält eine GridView, deren Zeilen den Namen und preis der einzelnen Produkte sowie eine Schaltfläche Auswählen enthalten. Wenn Sie auf die Schaltfläche Auswählen für ein bestimmtes Produkt klicken, werden die vollständigen Details in einem DetailsView-Steuerelement auf derselben Seite angezeigt.
Einführung
Im vorherigen Tutorial haben wir gezeigt, wie Sie einen master-/Detailbericht mithilfe von zwei Webseiten erstellen: eine "master"-Webseite, von der aus die Liste der Lieferanten angezeigt wurde; und eine "Details"-Webseite, auf der die vom ausgewählten Lieferanten bereitgestellten Produkte aufgeführt sind. Dieses Berichtsformat für zwei Seiten kann zu einer Seite zusammengefasst werden. Dieses Tutorial enthält eine GridView, deren Zeilen den Namen und preis der einzelnen Produkte sowie eine Schaltfläche Auswählen enthalten. Wenn Sie auf die Schaltfläche Auswählen für ein bestimmtes Produkt klicken, werden die vollständigen Details in einem DetailsView-Steuerelement auf derselben Seite angezeigt.
Abbildung 1: Beim Klicken auf die Schaltfläche "Auswählen" werden die Produktdetails angezeigt (Klicken Sie hier, um das bild in voller Größe anzuzeigen)
Schritt 1: Erstellen einer auswählbaren GridView
Erinnern Sie sich daran, dass im zweiseitigen master-/Detailbericht jeder master Datensatz einen Link enthielt, der den Benutzer beim Klicken auf die Detailseite gesendet hat, die den Wert der geklickten Zeile SupplierID
in der Abfragezeichenfolge übergibt. Ein solcher Link wurde jeder GridView-Zeile mithilfe eines HyperLinkField hinzugefügt. Für den Einzelseitenbericht master/Details benötigen wir eine Schaltfläche für jede GridView-Zeile, die beim Klicken die Details anzeigt. Das GridView-Steuerelement kann so konfiguriert werden, dass es eine Select-Schaltfläche für jede Zeile enthält, die ein Postback verursacht und diese Zeile als SelectedRow von GridView markiert.
Fügen Sie zunächst der Seite im Filtering
Ordner ein GridView-Steuerelement DetailsBySelecting.aspx
hinzu, und legen Sie dessen ID
Eigenschaft auf festProductsGrid
. Fügen Sie als Nächstes eine neue ObjectDataSource mit dem Namen hinzu AllProductsDataSource
, die die Methode der ProductsBLL
Klasse GetProducts()
aufruft.
Abbildung 2: Erstellen eines ObjectDataSource-Namens AllProductsDataSource
(Klicken Sie hier, um das bild in voller Größe anzuzeigen)
Abbildung 3: Verwenden der ProductsBLL
-Klasse (Klicken Sie hier, um das bild in voller Größe anzuzeigen)
Abbildung 4: Konfigurieren der ObjectDataSource zum Aufrufen der GetProducts()
-Methode (Klicken Sie hier, um das bild in voller Größe anzuzeigen)
Bearbeiten Sie die Felder von GridView, wobei alle außer boundFields ProductName
und UnitPrice
entfernt werden. Außerdem können Sie diese BoundFields nach Bedarf anpassen, z. B. das Formatieren des UnitPrice
BoundField als Währung und das Ändern der HeaderText
Eigenschaften von BoundFields. Diese Schritte können grafisch ausgeführt werden, indem Sie im Smarttag des GridView-Smarttags auf den Link Spalten bearbeiten klicken oder die deklarative Syntax manuell konfigurieren.
Abbildung 5: Entfernen von "Alle außer den ProductName
BoundFields" und UnitPrice
"BoundFields" (Klicken Sie hier, um das bild in voller Größe anzuzeigen)
Das endgültige Markup für die GridView lautet:
<asp:GridView ID="ProductsGrid" runat="server"
AutoGenerateColumns="False" DataKeyNames="ProductID"
DataSourceID="AllProductsDataSource" EnableViewState="False">
<Columns>
<asp:BoundField DataField="ProductName"
HeaderText="Product" SortExpression="ProductName" />
<asp:BoundField DataField="UnitPrice"
DataFormatString="{0:c}" HeaderText="Unit Price"
HtmlEncode="False" SortExpression="UnitPrice" />
</Columns>
</asp:GridView>
Als Nächstes müssen wir die GridView als auswählbar markieren, wodurch jeder Zeile eine Schaltfläche Auswählen hinzugefügt wird. Aktivieren Sie dazu einfach das Kontrollkästchen Auswahl aktivieren im Smarttag von GridView.
Abbildung 6: Festlegen der Auswahl der Zeilen der GridView (Klicken Sie hier, um das bild in voller Größe anzuzeigen)
Durch Aktivieren der Option Auswahl aktivieren wird der ProductsGrid
GridView ein CommandField hinzugefügt, dessen ShowSelectButton
Eigenschaft auf True festgelegt ist. Dies führt zu einer Schaltfläche Auswählen für jede Zeile der GridView, wie Abbildung 6 veranschaulicht. Standardmäßig werden die Select-Schaltflächen als LinkButtons gerendert. Sie können stattdessen Schaltflächen oder ImageButtons über die CommandField-Eigenschaft ButtonType
verwenden.
<asp:GridView ID="ProductsGrid" runat="server"
AutoGenerateColumns="False" DataKeyNames="ProductID"
DataSourceID="AllProductsDataSource" EnableViewState="False">
<Columns>
<asp:CommandField ShowSelectButton="True" />
<asp:BoundField DataField="ProductName"
HeaderText="Product" SortExpression="ProductName" />
<asp:BoundField DataField="UnitPrice"
DataFormatString="{0:c}" HeaderText="Unit Price"
HtmlEncode="False" SortExpression="UnitPrice" />
</Columns>
</asp:GridView>
Wenn auf die Schaltfläche Auswählen einer GridView-Zeile geklickt wird, erfolgt ein Postback, und die GridView-Eigenschaft SelectedRow
wird aktualisiert. Zusätzlich zur SelectedRow
-Eigenschaft stellt GridView die Eigenschaften SelectedIndex, SelectedValue und SelectedDataKey bereit. Die SelectedIndex
-Eigenschaft gibt den Index der ausgewählten Zeile zurück, während die SelectedValue
Eigenschaften und SelectedDataKey
Werte basierend auf der DataKeyNames-Eigenschaft von GridView zurückgeben.
Die DataKeyNames
-Eigenschaft wird verwendet, um jeder Zeile einen oder mehrere Datenfeldwerte zuzuordnen und wird häufig verwendet, um jeder GridView-Zeile eindeutig identifizierende Informationen aus den zugrunde liegenden Daten zuzuordnen. Die SelectedValue
-Eigenschaft gibt den Wert des ersten DataKeyNames
Datenfelds DataKey
für die ausgewählte Zeile zurück, wobei die SelectedDataKey
-Eigenschaft das Objekt der ausgewählten Zeile zurückgibt, das alle Werte für die angegebenen Datenschlüsselfelder für diese Zeile enthält.
Die DataKeyNames
-Eigenschaft wird automatisch auf die eindeutig identifizierenden Datenfelder festgelegt, wenn Sie eine Datenquelle über die Designer an eine GridView-, DetailsView- oder FormView-Instanz binden. Obwohl diese Eigenschaft für uns in den vorherigen Tutorials automatisch festgelegt wurde, hätten die Beispiele ohne die DataKeyNames
angegebene Eigenschaft funktioniert. Für die auswählbare GridView in diesem Tutorial sowie für zukünftige Tutorials, in denen wir das Einfügen, Aktualisieren und Löschen untersuchen, muss die DataKeyNames
Eigenschaft jedoch ordnungsgemäß festgelegt werden. Nehmen Sie sich einen Moment Zeit, um sicherzustellen, dass die Eigenschaft Ihrer GridView DataKeyNames
auf ProductID
festgelegt ist.
Sehen Wir uns unseren bisherigen Fortschritt über einen Browser an. Beachten Sie, dass die GridView den Namen und den Preis für alle Produkte zusammen mit einem LinkButton auswählen auflistet. Durch Klicken auf die Schaltfläche Auswählen wird ein Postback verursacht. In Schritt 2 erfahren Sie, wie eine DetailsView auf dieses Postback reagiert, indem die Details für das ausgewählte Produkt angezeigt werden.
Abbildung 7: Jede Produktzeile enthält einen Link auswählenButton (Klicken Sie, um das Bild in voller Größe anzuzeigen)
Markieren der ausgewählten Zeile
GridView ProductsGrid
verfügt über eine SelectedRowStyle
Eigenschaft, die verwendet werden kann, um den visuellen Stil für die ausgewählte Zeile zu diktieren. Richtig verwendet, kann dies die Benutzerfreundlichkeit verbessern, indem deutlicher angezeigt wird, welche Zeile der GridView derzeit ausgewählt ist. In diesem Tutorial können Sie die ausgewählte Zeile mit einem gelben Hintergrund hervorheben.
Wie in unseren früheren Tutorials streben wir an, die ästhetischen Einstellungen beizubehalten, die als CSS-Klassen definiert sind. Erstellen Sie daher eine neue CSS-Klasse mit Styles.css
dem Namen SelectedRowStyle
.
.SelectedRowStyle
{
background-color: Yellow;
}
Um diese CSS-Klasse auf die SelectedRowStyle
Eigenschaft aller GridViews in unserer Tutorialreihe anzuwenden, bearbeiten Sie die GridView.skin
Skin im DataWebControls
Design, um die SelectedRowStyle
Einstellungen wie unten dargestellt einzuschließen:
<asp:GridView runat="server" CssClass="DataWebControlStyle">
<AlternatingRowStyle CssClass="AlternatingRowStyle" />
<RowStyle CssClass="RowStyle" />
<HeaderStyle CssClass="HeaderStyle" />
<SelectedRowStyle CssClass="SelectedRowStyle" />
</asp:GridView>
Mit dieser Ergänzung wird die ausgewählte GridView-Zeile jetzt mit einer gelben Hintergrundfarbe hervorgehoben.
Abbildung 8: Anpassen der Darstellung der ausgewählten Zeile mithilfe der GridView-Eigenschaft SelectedRowStyle
(Klicken Sie hier, um das bild in voller Größe anzuzeigen)
Schritt 2: Anzeigen der Details des ausgewählten Produkts in einer Detailansicht
Wenn gridView ProductsGrid
abgeschlossen ist, müssen Sie nur noch eine DetailsView hinzufügen, die Informationen zu dem ausgewählten Produkt anzeigt. Fügen Sie ein DetailsView-Steuerelement über gridView hinzu, und erstellen Sie eine neue ObjectDataSource mit dem Namen ProductDetailsDataSource
. Da in dieser DetailsView bestimmte Informationen zum ausgewählten Produkt angezeigt werden sollen, konfigurieren Sie für die ProductDetailsDataSource
Verwendung der -Methode der ProductsBLL
-Klasse GetProductByProductID(productID)
.
Abbildung 9: Aufrufen der Methode der ProductsBLL
Klasse GetProductByProductID(productID)
(Klicken Sie hier, um das bild in voller Größe anzuzeigen)
Lassen Sie den productID
Wert des Parameters aus der Eigenschaft des GridView-Steuerelements SelectedValue
abrufen. Wie bereits erläutert, gibt die GridView-Eigenschaft SelectedValue
den ersten Datenschlüsselwert für die ausgewählte Zeile zurück. Daher ist es zwingend erforderlich, dass die GridView-Eigenschaft DataKeyNames
auf ProductID
festgelegt ist, damit der Wert der ausgewählten Zeile ProductID
von SelectedValue
zurückgegeben wird.
Abbildung 10: Legen Sie den productID
Parameter auf die GridView-Eigenschaft SelectedValue
fest (Klicken Sie hier, um das bild in voller Größe anzuzeigen)
Sobald die productDetailsDataSource
ObjectDataSource ordnungsgemäß konfiguriert und an die DetailsView gebunden wurde, ist dieses Tutorial abgeschlossen! Wenn die Seite zum ersten Mal besucht wird, wird keine Zeile ausgewählt, sodass die GridView-Eigenschaft SelectedValue
zurückgibt null
. Da es keine Produkte mit einem NULL
ProductID
Wert gibt, werden von der GetProductByProductID(productID)
-Methode keine Datensätze zurückgegeben, was bedeutet, dass die DetailsView nicht angezeigt wird (siehe Abbildung 11). Wenn Sie auf die Schaltfläche Auswählen einer GridView-Zeile klicken, folgt ein Postback, und die DetailsView wird aktualisiert. Dieses Mal gibt die GridView-Eigenschaft SelectedValue
die ProductID
der ausgewählten Zeile zurück, die GetProductByProductID(productID)
-Methode gibt eine ProductsDataTable
mit Informationen zu diesem bestimmten Produkt zurück, und die DetailsView zeigt diese Details an (siehe Abbildung 12).
Abbildung 11: Beim ersten Besuch wird nur die GridView angezeigt (Klicken Sie, um das bild in voller Größe anzuzeigen)
Abbildung 12: Beim Auswählen einer Zeile werden die Produktdetails angezeigt (Klicken Sie, um das Bild in voller Größe anzuzeigen).
Zusammenfassung
In diesem und den drei vorherigen Tutorials haben wir eine Reihe von Techniken zum Anzeigen von master-/Detailberichten gesehen. In diesem Tutorial haben wir die Verwendung eines auswählbaren GridView-Steuerelements zum Aufnehmen der master Datensätze und einer DetailsView untersucht, um Details zum ausgewählten master Datensatz auf derselben Seite anzuzeigen. In den vorherigen Tutorials haben wir uns mit der Anzeige von master-/Detailberichten mithilfe von DropDownLists und dem Anzeigen master Datensätzen auf einer Webseite und detailierten Datensätzen auf einer anderen Seite befasst.
Dieses Tutorial schließt unsere Untersuchung von master/Detailberichten ab. Ab dem nächsten Tutorial beginnen wir mit der Untersuchung der benutzerdefinierten Formatierung mit GridView, DetailsView und FormView. Wir erfahren, wie Sie die Darstellung dieser Steuerelemente basierend auf den an sie gebundenen Daten anpassen, wie Daten in der Fußzeile von GridView zusammengefasst werden und wie Sie Vorlagen verwenden, um ein größeres Maß an Kontrolle über das Layout zu erhalten.
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. Lead Reviewer für dieses Tutorial war Hilton Giesenow. Möchten Sie meine anstehenden MSDN-Artikel lesen? Wenn dies der Fall ist, legen Sie eine Zeile unter abmitchell@4GuysFromRolla.com.
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für