Sortieren von Daten in einem DataList- oder Wiederholungssteuerelement (VB)
von Scott Mitchell
In diesem Tutorial erfahren Sie, wie Sie die Sortierunterstützung in DataList und Repeater einschließen und wie Sie eine DataList oder einen Repeater erstellen, deren Daten ausgelagert und sortiert werden können.
Einführung
Im vorherigen Tutorial haben wir uns mit dem Hinzufügen von Pagingunterstützung zu einer DataList befasst. Wir haben eine neue Methode in der ProductsBLL
-Klasse (GetProductsAsPagedDataSource
) erstellt, die ein PagedDataSource
-Objekt zurückgegeben hat. Wenn sie an eine DataList oder einen Repeater gebunden ist, zeigt die DataList oder der Repeater nur die angeforderte Seite der Daten an. Diese Technik ähnelt dem, was intern von den GridView-, DetailsView- und FormView-Steuerelementen verwendet wird, um die integrierte Standardpa paging-Funktionalität bereitzustellen.
Zusätzlich zur Unterstützung von Paging bietet GridView auch sofort einsatzbereite Sortierunterstützung. Weder dataList noch Repeater bieten integrierte Sortierfunktionen. Sortierfunktionen können jedoch mit etwas Code hinzugefügt werden. In diesem Tutorial erfahren Sie, wie Sie die Sortierunterstützung in DataList und Repeater einschließen und wie Sie eine DataList oder einen Repeater erstellen, deren Daten ausgelagert und sortiert werden können.
Eine Überprüfung der Sortierung
Wie wir im Tutorial Paging and Sorting Report Data gesehen haben, bietet das GridView-Steuerelement eine sofort einsatzbereite Sortierunterstützung. Jedem GridView-Feld kann eine zugeordnete SortExpression
sein, die das Datenfeld angibt, nach dem die Daten sortiert werden sollen. Wenn die GridView-Eigenschaft AllowSorting
auf true
festgelegt ist, wird für jedes GridView-Feld mit einem SortExpression
Eigenschaftswert der Header als LinkButton gerendert. Wenn ein Benutzer auf eine bestimmte Kopfzeile des GridView-Felds klickt, erfolgt ein Postback, und die Daten werden nach den geklickten Felds sortiert SortExpression
.
Das GridView-Steuerelement verfügt ebenfalls über eine SortExpression
-Eigenschaft, die den des SortExpression
GridView-Felds speichert, nach dem die Daten sortiert werden. Darüber hinaus gibt eine SortDirection
Eigenschaft an, ob die Daten in aufsteigender oder absteigender Reihenfolge sortiert werden sollen (wenn ein Benutzer zweimal hintereinander auf einen bestimmten Headerlink des GridView-Felds klickt, wird die Sortierreihenfolge umgeschaltet).
Wenn gridView an sein Datenquellensteuerelement gebunden ist, übergibt es seine SortExpression
Eigenschaften und SortDirection
an das Datenquellensteuerelement. Das Datenquellensteuerelement ruft die Daten ab und sortiert sie dann nach den angegebenen SortExpression
Eigenschaften und SortDirection
. Nach dem Sortieren der Daten gibt das Datenquellensteuerelement sie an GridView zurück.
Um diese Funktionalität mit den DataList- oder Repeater-Steuerelementen zu replizieren, müssen wir:
- Erstellen einer Sortierschnittstelle
- Merken Sie sich das Datenfeld, nach dem sortiert werden soll, und ob in aufsteigender oder absteigender Reihenfolge sortiert werden soll.
- Weisen Sie die ObjectDataSource an, die Daten nach einem bestimmten Datenfeld zu sortieren.
Diese drei Aufgaben werden in den Schritten 3 und 4 behandelt. Anschließend untersuchen wir, wie Sie die Unterstützung für Paging und Sortierung in eine DataList oder einen Repeater einschließen.
Schritt 2: Anzeigen der Produkte in einem Repeater
Bevor wir uns gedanken über die Implementierung einer sortierbezogenen Funktionalität machen, beginnen wir mit der Auflistung der Produkte in einem Repeater-Steuerelement. Öffnen Sie zunächst die Sorting.aspx
Seite im PagingSortingDataListRepeater
Ordner. Fügen Sie der Webseite ein Repeater-Steuerelement hinzu, und legen Sie dessen ID
-Eigenschaft auf fest SortableProducts
. Erstellen Sie aus dem Smarttag des Repeaters eine neue ObjectDataSource mit dem Namen ProductsDataSource
, und konfigurieren Sie sie so, dass Daten aus der s-Methode der ProductsBLL
Klasse GetProducts()
abgerufen werden. Wählen Sie in den Dropdownlisten auf den Registerkarten INSERT, UPDATE und DELETE die Option (Keine) aus.
Abbildung 1: Erstellen sie eine ObjectDataSource, und konfigurieren Sie sie für die Verwendung der GetProductsAsPagedDataSource()
-Methode (Klicken Sie hier, um ein Bild in voller Größe anzuzeigen)
Abbildung 2: Festlegen der Drop-Down Listen auf den Registerkarten UPDATE, INSERT und DELETE auf (Keine) (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Im Gegensatz zu DataList erstellt Visual Studio nicht automatisch eine ItemTemplate
für das Repeater-Steuerelement, nachdem es an eine Datenquelle gebunden wurde. Darüber hinaus müssen wir dies ItemTemplate
deklarativ hinzufügen, da dem Smarttag des Repeater-Steuerelements die Option Vorlagen bearbeiten in den DataLists fehlt. Lassen Sie uns den gleichen ItemTemplate
aus dem vorherigen Tutorial verwenden, in dem der Name, der Lieferant und die Kategorie des Produkts angezeigt wurden.
Nach dem Hinzufügen von ItemTemplate
sollte das deklarative Markup repeater und ObjectDataSource in etwa wie folgt aussehen:
<asp:Repeater ID="SortableProducts" DataSourceID="ProductsDataSource"
EnableViewState="False" runat="server">
<ItemTemplate>
<h4><asp:Label ID="ProductNameLabel" runat="server"
Text='<%# Eval("ProductName") %>'></asp:Label></h4>
Category:
<asp:Label ID="CategoryNameLabel" runat="server"
Text='<%# Eval("CategoryName") %>'></asp:Label><br />
Supplier:
<asp:Label ID="SupplierNameLabel" runat="server"
Text='<%# Eval("SupplierName") %>'></asp:Label><br />
<br />
<br />
</ItemTemplate>
</asp:Repeater>
<asp:ObjectDataSource ID="ProductsDataSource" runat="server"
OldValuesParameterFormatString="original_{0}" TypeName="ProductsBLL"
SelectMethod="GetProducts">
</asp:ObjectDataSource>
Abbildung 3 zeigt diese Seite, wenn sie über einen Browser angezeigt wird.
Abbildung 3: Name, Lieferant und Kategorie jedes Produkts werden angezeigt (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Schritt 3: Anweisen der ObjectDataSource, die Daten zu sortieren
Um die im Repeater angezeigten Daten zu sortieren, müssen wir die ObjectDataSource über den Sortierausdruck informieren, nach dem die Daten sortiert werden sollen. Bevor die ObjectDataSource ihre Daten abruft, löst sie zunächst das Selecting
-Ereignis aus, das uns die Möglichkeit bietet, einen Sortierausdruck anzugeben. Dem Selecting
Ereignishandler wird ein Objekt vom Typ ObjectDataSourceSelectingEventArgs
übergeben, das über eine Eigenschaft namens vom Arguments
Typ DataSourceSelectArguments
verfügt. Die DataSourceSelectArguments
-Klasse wurde entwickelt, um datenbezogene Anforderungen von einem Consumer von Daten an das Datenquellensteuerelement zu übergeben, und enthält eine SortExpression
-Eigenschaft.
Um Sortierinformationen von der seite ASP.NET an objectDataSource zu übergeben, erstellen Sie einen Ereignishandler für das Selecting
Ereignis, und verwenden Sie den folgenden Code:
Protected Sub ProductsDataSource_Selecting(ByVal sender As Object, _
ByVal e As ObjectDataSourceSelectingEventArgs) _
Handles ProductsDataSource.Selecting
e.Arguments.SortExpression = sortExpression
End Sub
Dem sortExpression-Wert sollte der Name des Datenfelds zugewiesen werden, nach dem die Daten sortiert werden sollen (z. B. ProductName ). Es gibt keine richtungsbezogene Sortiereigenschaft. Wenn Sie die Daten also in absteigender Reihenfolge sortieren möchten, fügen Sie die Zeichenfolge DESC an den SortExpression-Wert an (z. B. ProductName DESC ).
Probieren Sie verschiedene hartcodierte Werte für sortExpression aus, und testen Sie die Ergebnisse in einem Browser. Wie Abbildung 4 zeigt, werden die Produkte bei Verwendung von ProductName DESC als sortExpression in umgekehrter alphabetischer Reihenfolge nach ihrem Namen sortiert.
Abbildung 4: Die Produkte werden nach ihrem Namen in umgekehrter alphabetischer Reihenfolge sortiert (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Schritt 4: Erstellen der Sortierschnittstelle und Speichern des Sortierausdrucks und der Richtung
Wenn Sie die Sortierunterstützung in GridView aktivieren, wird der Headertext jedes sortierbaren Felds in ein LinkButton-Objekt konvertiert, das die Daten nach dem Klicken entsprechend sortiert. Eine solche Sortierschnittstelle ist für gridView sinnvoll, bei dem die Daten sauber in Spalten angeordnet sind. Für die DataList- und Repeater-Steuerelemente ist jedoch eine andere Sortierschnittstelle erforderlich. Eine gängige Sortierschnittstelle für eine Liste von Daten (im Gegensatz zu einem Datenraster) ist eine Dropdownliste, die die Felder bereitstellt, nach denen die Daten sortiert werden können. Lassen Sie uns eine solche Schnittstelle für dieses Tutorial implementieren.
Fügen Sie ein DropDownList-Websteuerelement über dem SortableProducts
Repeater hinzu, und legen Sie dessen ID
Eigenschaft auf fest SortBy
. Klicken Sie in der Eigenschaftenfenster auf die Auslassungspunkte in der Items
-Eigenschaft, um die Editor ListItem-Auflistung anzuzeigen. Fügen Sie s hinzu ListItem
, um die Daten nach den ProductName
Feldern , CategoryName
und SupplierName
zu sortieren. Fügen Sie außerdem ein hinzu ListItem
, um die Produkte nach ihrem Namen in umgekehrter alphabetischer Reihenfolge zu sortieren.
Die ListItem
Text
Eigenschaften können auf einen beliebigen Wert (z. B. Name ) festgelegt werden, aber die Value
Eigenschaften müssen auf den Namen des Datenfelds festgelegt werden (z. B. ProductName ). Um die Ergebnisse in absteigender Reihenfolge zu sortieren, fügen Sie die Zeichenfolge DESC an den Datenfeldnamen an, z. B. ProductName DESC .
Abbildung 5: Hinzufügen eines ListItem
für jedes der sortierbaren Datenfelder
Fügen Sie schließlich rechts neben der DropDownList ein Button-Websteuerelement hinzu. Legen Sie auf ID
RefreshRepeater
und die - Text
Eigenschaft auf Aktualisieren fest.
Nach dem Erstellen der ListItem
s und dem Hinzufügen der Schaltfläche Aktualisieren sollte die deklarative Syntax von DropDownList und Button in etwa wie folgt aussehen:
<asp:DropDownList ID="SortBy" runat="server">
<asp:ListItem Value="ProductName">Name</asp:ListItem>
<asp:ListItem Value="ProductName DESC">Name (Reverse Order)
</asp:ListItem>
<asp:ListItem Value="CategoryName">Category</asp:ListItem>
<asp:ListItem Value="SupplierName">Supplier</asp:ListItem>
</asp:DropDownList>
<asp:Button runat="server" ID="RefreshRepeater" Text="Refresh" />
Nachdem das Sortieren von DropDownList abgeschlossen ist, müssen wir als Nächstes Selecting
den ObjectDataSource-Ereignishandler aktualisieren, sodass er die ausgewählte SortBy``ListItem
s-Eigenschaft Value
anstelle eines hartcodierten Sortierausdrucks verwendet.
Protected Sub ProductsDataSource_Selecting _
(ByVal sender As Object, ByVal e As ObjectDataSourceSelectingEventArgs) _
Handles ProductsDataSource.Selecting
' Have the ObjectDataSource sort the results by the
' selected sort expression
e.Arguments.SortExpression = SortBy.SelectedValue
End Sub
Wenn Sie die Seite zum ersten Mal besuchen, werden die Produkte zunächst nach dem ProductName
Datenfeld sortiert, da es sich dabei standardmäßig um die SortBy
ListItem
ausgewählte handelt (siehe Abbildung 6). Wenn Sie eine andere Sortieroption wie Kategorie auswählen und auf Aktualisieren klicken, wird ein Postback ausgelöst und die Daten wie in Abbildung 7 dargestellt nach dem Kategorienamen neu sortiert.
Abbildung 6: Die Produkte werden zunächst nach ihrem Namen sortiert (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Abbildung 7: Die Produkte sind jetzt nach Kategorie sortiert (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Hinweis
Durch Klicken auf die Schaltfläche Aktualisieren werden die Daten automatisch neu sortiert, da der Ansichtszustand des Repeaters deaktiviert wurde, wodurch der Repeater bei jedem Postback erneut an seine Datenquelle binden kann. Wenn Sie den Ansichtszustand des Repeaters aktiviert haben, hat das Ändern der Sortierliste keine Auswirkungen auf die Sortierreihenfolge. Um dies zu beheben, erstellen Sie einen Ereignishandler für das Refresh Button-Ereignis, Click
und binden Sie den Repeater erneut an seine Datenquelle (durch Aufrufen der Repeater-Methode).DataBind()
Speichern des Sortierausdrucks und der Richtung
Beim Erstellen einer sortierbaren DataList oder eines Repeaters auf einer Seite, auf der nicht sortierbare Postbacks auftreten können, ist es zwingend erforderlich, dass der Sortierausdruck und die Sortierrichtung über Postbacks hinweg gespeichert werden. Stellen Sie sich beispielsweise vor, dass wir den Repeater in diesem Tutorial aktualisiert haben, um für jedes Produkt eine Schaltfläche Löschen einzuschließen. Wenn der Benutzer auf die Schaltfläche Löschen klickt, führen wir code aus, um das ausgewählte Produkt zu löschen und die Daten dann erneut an den Repeater zu binden. Wenn die Sortierdetails nicht über das Postback hinweg beibehalten werden, rückgängig machen die auf dem Bildschirm angezeigten Daten zur ursprünglichen Sortierreihenfolge.
In diesem Tutorial speichert DropDownList implizit den Sortierausdruck und die Richtung in seinem Ansichtszustand für uns. Wenn wir eine andere Sortierschnittstelle verwenden würden, z. B. mit LinkButtons, die die verschiedenen Sortieroptionen bereitstellte, müssen wir darauf achten, die Sortierreihenfolge über Postbacks hinweg zu speichern. Dies kann erreicht werden, indem die Sortierparameter im Ansichtszustand der Seite gespeichert werden, indem der Sortierparameter in die Abfragezeichenfolge eingeschlossen wird, oder durch eine andere Zustandspersistenztechnik.
In zukünftigen Beispielen in diesem Tutorial wird erläutert, wie die Sortierdetails im Ansichtszustand der Seite beibehalten werden.
Schritt 5: Hinzufügen der Sortierunterstützung zu einer DataList, die standard paging verwendet
Im vorherigen Tutorial haben wir uns mit der Implementierung von Standard paging mit einer DataList befasst. Lassen Sie uns dieses vorherige Beispiel erweitern, um die Möglichkeit zum Sortieren der ausgelagerten Daten einzuschließen. Öffnen Sie zunächst die SortingWithDefaultPaging.aspx
Seiten und Paging.aspx
im PagingSortingDataListRepeater
Ordner. Klicken Sie auf der Paging.aspx
Seite auf die Schaltfläche Quelle, um das deklarative Markup der Seite anzuzeigen. Kopieren Sie den markierten Text (siehe Abbildung 8), und fügen Sie ihn in das deklarative Markup von SortingWithDefaultPaging.aspx
zwischen den <asp:Content>
Tags ein.
Abbildung 8: Replizieren des deklarativen Markups in den <asp:Content>
Tags von Paging.aspx
bis SortingWithDefaultPaging.aspx
(Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Kopieren Sie nach dem Kopieren des deklarativen Markups die Methoden und Eigenschaften in der CodeBehind-Klasse der Paging.aspx
Seite in die CodeBehind-Klasse für SortingWithDefaultPaging.aspx
. Nehmen Sie sich als Nächstes zeit, um die SortingWithDefaultPaging.aspx
Seite in einem Browser anzuzeigen. Es sollte die gleiche Funktionalität und Darstellung aufweisen wie Paging.aspx
.
Verbessern von ProductsBLL, um eine Standardmäßige Paging- und Sortiermethode einzuschließen
Im vorherigen Tutorial haben wir eine GetProductsAsPagedDataSource(pageIndex, pageSize)
Methode in der -Klasse erstellt, die ProductsBLL
ein PagedDataSource
-Objekt zurückgegeben hat. Dieses PagedDataSource
Objekt wurde mit allen Produkten aufgefüllt (über die BLL-Methode), GetProducts()
aber wenn sie an die DataList gebunden wurde, wurden nur die Datensätze angezeigt, die den angegebenen Eingabeparametern pageIndex und pageSize entsprechen.
Weiter oben in diesem Tutorial wurde die Sortierunterstützung durch Angabe des Sortierausdrucks aus dem ObjectDataSource-Ereignishandler Selecting
hinzugefügt. Dies funktioniert gut, wenn objectDataSource ein Objekt zurückgegeben wird, das sortiert werden kann, z. B. das ProductsDataTable
von der GetProducts()
-Methode zurückgegebene. Das von der PagedDataSource
GetProductsAsPagedDataSource
-Methode zurückgegebene Objekt unterstützt jedoch keine Sortierung seiner inneren Datenquelle. Stattdessen müssen wir die von der GetProducts()
-Methode zurückgegebenen Ergebnisse sortieren, bevor wir sie in die PagedDataSource
-Methode einfügen.
Um dies zu erreichen, erstellen Sie eine neue Methode in der ProductsBLL
-Klasse, GetProductsSortedAsPagedDataSource(sortExpression, pageIndex, pageSize)
. Um die ProductsDataTable
von der GetProducts()
-Methode zurückgegebene zu sortieren, geben Sie die Sort
-Eigenschaft des -Standardwerts DataTableView
an:
<System.ComponentModel.DataObjectMethodAttribute _
(System.ComponentModel.DataObjectMethodType.Select, False)> _
Public Function GetProductsSortedAsPagedDataSource _
(sortExpression As String, pageIndex As Integer, pageSize As Integer) _
As PagedDataSource
' Get ALL of the products
Dim products As Northwind.ProductsDataTable = GetProducts()
'Sort the products
products.DefaultView.Sort = sortExpression
' Limit the results through a PagedDataSource
Dim pagedData As New PagedDataSource()
pagedData.DataSource = products.DefaultView
pagedData.AllowPaging = True
pagedData.CurrentPageIndex = pageIndex
pagedData.PageSize = pageSize
Return pagedData
End Function
Die GetProductsSortedAsPagedDataSource
-Methode unterscheidet sich nur geringfügig von der Methode, die GetProductsAsPagedDataSource
im vorherigen Tutorial erstellt wurde. Akzeptiert insbesondere GetProductsSortedAsPagedDataSource
einen zusätzlichen Eingabeparameter sortExpression
und weist diesen Wert der Sort
-Eigenschaft von ProductDataTable
s DefaultView
zu. Ein paar Codezeilen später wird dem PagedDataSource
Objekt s DataSource der ProductDataTable
s DefaultView
zugewiesen.
Aufrufen der GetProductsSortedAsPagedDataSource-Methode und Angeben des Werts für den SortExpression-Eingabeparameter
Wenn die GetProductsSortedAsPagedDataSource
-Methode abgeschlossen ist, besteht der nächste Schritt darin, den Wert für diesen Parameter bereitzustellen. Die ObjectDataSource in SortingWithDefaultPaging.aspx
ist derzeit so konfiguriert, dass die GetProductsAsPagedDataSource
-Methode aufgerufen wird und die beiden Eingabeparameter über die beiden QueryStringParameters
in der SelectParameters
Auflistung angegebenen übergeben werden. Diese beiden QueryStringParameters
geben an, dass die Quelle für die GetProductsAsPagedDataSource
Parameter pageIndex und pageSize der Methode aus den Querystring-Feldern pageIndex
und pageSize
stammen.
Aktualisieren Sie die ObjectDataSource-Eigenschaft SelectMethod
, sodass sie die neue GetProductsSortedAsPagedDataSource
Methode aufruft. Fügen Sie dann eine neue QueryStringParameter
hinzu, damit über das Querystring-Feld sortExpression
auf den eingabeparameter sortExpression zugegriffen wird. Legen Sie die QueryStringParameter
s DefaultValue
auf ProductName fest.
Nach diesen Änderungen sollte das deklarative Markup von ObjectDataSource wie folgt aussehen:
<asp:ObjectDataSource ID="ProductsDefaultPagingDataSource"
OldValuesParameterFormatString="original_{0}" TypeName="ProductsBLL"
SelectMethod="GetProductsSortedAsPagedDataSource"
OnSelected="ProductsDefaultPagingDataSource_Selected" runat="server">
<SelectParameters>
<asp:QueryStringParameter DefaultValue="ProductName"
Name="sortExpression" QueryStringField="sortExpression"
Type="String" />
<asp:QueryStringParameter DefaultValue="0" Name="pageIndex"
QueryStringField="pageIndex" Type="Int32" />
<asp:QueryStringParameter DefaultValue="4" Name="pageSize"
QueryStringField="pageSize" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>
An diesem Punkt sortiert die SortingWithDefaultPaging.aspx
Seite ihre Ergebnisse alphabetisch nach dem Produktnamen (siehe Abbildung 9). Dies liegt daran, dass standardmäßig der Wert ProductName als SortExpression-Parameter der GetProductsSortedAsPagedDataSource
Methode übergeben wird.
Abbildung 9: Standardmäßig sind die Ergebnisse nach ProductName
sortiert (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Wenn Sie manuell ein sortExpression
Abfragezeichenfolgenfeld hinzufügen, z SortingWithDefaultPaging.aspx?sortExpression=CategoryName
. B. werden die Ergebnisse nach dem angegebenen sortExpression
sortiert. Dieser sortExpression
Parameter ist jedoch nicht in der Abfragezeichenfolge enthalten, wenn sie zu einer anderen Datenseite verschoben wird. Wenn Sie auf die Schaltflächen "Nächste Seite" oder "Letzte Seite" klicken, gelangen Sie zurück zu Paging.aspx
! Darüber hinaus gibt es derzeit keine Sortierschnittstelle. Die einzige Möglichkeit, die Sortierreihenfolge der ausgelagerten Daten zu ändern, besteht darin, die Abfragezeichenfolge direkt zu bearbeiten.
Erstellen der Sortierschnittstelle
Wir müssen zuerst die RedirectUser
-Methode aktualisieren, um den Benutzer (anstelle von Paging.aspx
) zu SortingWithDefaultPaging.aspx
senden, und den sortExpression
Wert in die Abfragezeichenfolge einzuschließen. Wir sollten auch eine schreibgeschützte benannte SortExpression
Eigenschaft auf Seitenebene hinzufügen. Diese Eigenschaft, ähnlich wie die PageIndex
im vorherigen Tutorial erstellten Eigenschaften und PageSize
, gibt den Wert des sortExpression
Abfragezeichenfolgenfelds zurück, sofern vorhanden, und andernfalls den Standardwert ( ProductName ).
Derzeit akzeptiert die RedirectUser
-Methode nur einen einzelnen Eingabeparameter, den der Index der anzuzeigenden Seite enthält. Es kann jedoch vorkommen, dass wir den Benutzer mithilfe eines anderen Sortierausdrucks als dem, was in der Abfragezeichenfolge angegeben ist, zu einer bestimmten Datenseite umleiten möchten. In kürze erstellen wir die Sortierschnittstelle für diese Seite, die eine Reihe von Button-Websteuerelementen zum Sortieren der Daten nach einer angegebenen Spalte enthält. Wenn auf eine dieser Schaltflächen geklickt wird, möchten wir den Benutzer umleiten, der den entsprechenden Sortierausdruckswert übergibt. Um diese Funktionalität bereitzustellen, erstellen Sie zwei Versionen der RedirectUser
-Methode. Die erste sollte nur den anzuzeigenden Seitenindex akzeptieren, während der zweite den Seitenindex und den Sortierausdruck akzeptiert.
Private ReadOnly Property SortExpression() As String
Get
If Not String.IsNullOrEmpty(Request.QueryString("sortExpression")) Then
Return Request.QueryString("sortExpression")
Else
Return "ProductName"
End If
End Get
End Property
Private Sub RedirectUser(ByVal sendUserToPageIndex As Integer)
' Use the SortExpression property to get the sort expression
' from the querystring
RedirectUser(sendUserToPageIndex, SortExpression)
End Sub
Private Sub RedirectUser(ByVal sendUserToPageIndex As Integer,
ByVal sendUserSortingBy As String)
' Send the user to the requested page with the
' requested sort expression
Response.Redirect(String.Format("SortingWithDefaultPaging.aspx?" & _
"pageIndex={0}&pageSize={1}&sortExpression={2}", _
sendUserToPageIndex, PageSize, sendUserSortingBy))
End Sub
Im ersten Beispiel in diesem Tutorial haben wir eine Sortierschnittstelle mithilfe einer DropDownList erstellt. In diesem Beispiel verwenden wir drei Button Web-Steuerelemente, die sich über dem DataList-Steuerelement befinden, zum Sortieren nach ProductName
, eines für CategoryName
und eines für SupplierName
. Fügen Sie die drei Button-Websteuerelemente hinzu, und legen Sie deren ID
Eigenschaften und Text
entsprechend fest:
<p>
<asp:Button runat="server" id="SortByProductName"
Text="Sort by Product Name" />
<asp:Button runat="server" id="SortByCategoryName"
Text="Sort by Category" />
<asp:Button runat="server" id="SortBySupplierName"
Text="Sort by Supplier" />
</p>
Erstellen Sie als Nächstes für jeden einen Click
Ereignishandler. Die Ereignishandler sollten die RedirectUser
-Methode aufrufen und den Benutzer mithilfe des entsprechenden Sortierausdrucks zur ersten Seite zurückgeben.
Protected Sub SortByProductName_Click(sender As Object, e As EventArgs) _
Handles SortByProductName.Click
'Sort by ProductName
RedirectUser(0, "ProductName")
End Sub
Protected Sub SortByCategoryName_Click(sender As Object, e As EventArgs) _
Handles SortByCategoryName.Click
'Sort by CategoryName
RedirectUser(0, "CategoryName")
End Sub
Protected Sub SortBySupplierName_Click(sender As Object, e As EventArgs) _
Handles SortBySupplierName.Click
'Sort by SupplierName
RedirectUser(0, "SupplierName")
End Sub
Beim ersten Besuch der Seite werden die Daten alphabetisch nach dem Produktnamen sortiert (siehe Abbildung 9). Klicken Sie auf die Schaltfläche Weiter, um zur zweiten Datenseite zu gelangen, und klicken Sie dann auf die Schaltfläche Nach Kategorie sortieren. Dadurch gelangen wir zur ersten Datenseite, sortiert nach Kategoriename (siehe Abbildung 10). Ebenso werden beim Klicken auf die Schaltfläche Nach Lieferanten sortieren die Daten ab der ersten Datenseite nach Lieferanten sortiert. Die Sortierauswahl wird beim Ausblättern der Daten gespeichert. Abbildung 11 zeigt die Seite nach der Sortierung nach Kategorie und dann dem Fortschritt zur dreizehnten Datenseite.
Abbildung 10: Die Produkte sind nach Kategorie sortiert (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Abbildung 11: Der Sortierausdruck wird beim Durchlaufen der Daten gespeichert (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Schritt 6: Benutzerdefiniertes Paging durch Datensätze in einem Repeater
Im DataList-Beispiel wurden in Schritt 5 Seiten anhand der Daten mithilfe der ineffizienten Standard-Paging-Technik untersucht. Beim Paging durch ausreichend große Datenmengen muss unbedingt benutzerdefiniertes Paging verwendet werden. Zurück in den Tutorials Effizientes Paging durch große Datenmengen und Sortieren von benutzerdefinierten ausgelagerten Daten haben wir die Unterschiede zwischen Standard- und benutzerdefiniertem Paging und erstellten Methoden in der BLL für die Verwendung von benutzerdefinierten Paging und sortieren benutzerdefinierte Auslagerungsdaten untersucht. Insbesondere in diesen beiden vorherigen Tutorials haben wir der ProductsBLL
Klasse die folgenden drei Methoden hinzugefügt:
GetProductsPaged(startRowIndex, maximumRows)
gibt eine bestimmte Teilmenge von Datensätzen zurück, die bei startRowIndex beginnen und maximumRows nicht überschreiten.GetProductsPagedAndSorted(sortExpression, startRowIndex, maximumRows)
gibt eine bestimmte Teilmenge von Datensätzen zurück, die nach dem angegebenen sortExpression-Eingabeparameter sortiert sind.TotalNumberOfProducts()
stellt die Gesamtzahl der Datensätze in derProducts
Datenbanktabelle bereit.
Mit diesen Methoden können Daten mithilfe eines DataList- oder Repeater-Steuerelements effizient ausgelagert und sortiert werden. Um dies zu veranschaulichen, erstellen wir zunächst ein Repeater-Steuerelement mit benutzerdefinierter Pagingunterstützung. Anschließend fügen wir Sortierfunktionen hinzu.
Öffnen Sie die SortingWithCustomPaging.aspx
Seite im PagingSortingDataListRepeater
Ordner, und fügen Sie der Seite einen Repeater hinzu, und legen Sie die ID
-Eigenschaft auf fest Products
. Erstellen Sie aus dem Smarttag des Repeaters eine neue ObjectDataSource mit dem Namen ProductsDataSource
. Konfigurieren Sie sie, um die zugehörigen Daten aus der ProductsBLL
Klasse s-Methode GetProductsPaged
auszuwählen.
Abbildung 12: Konfigurieren der ObjectDataSource für die Verwendung der ProductsBLL
Class s-Methode (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)GetProductsPaged
Legen Sie die Dropdownlisten auf den Registerkarten UPDATE, INSERT und DELETE auf (Keine) fest, und klicken Sie dann auf die Schaltfläche Weiter. Der Assistent zum Konfigurieren von Datenquellen fordert jetzt zur Eingabe der Quellen der GetProductsPaged
Eingabeparameter s startRowIndex und maximumRows auf. Tatsächlich werden diese Eingabeparameter ignoriert. Stattdessen werden die Werte startRowIndex und maximumRows über die Arguments
-Eigenschaft im ObjectDataSource-Ereignishandler Selecting
übergeben, genau wie in der ersten Demo dieses Tutorials sortExpression angegeben. Behalten Sie daher die Dropdownlisten für die Parameterquelle im Assistenten bei, die auf Keine festgelegt sind.
Abbildung 13: Lassen Sie die Parameterquellen auf Keine festgelegt (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Hinweis
Legen Sie die ObjectDataSource-Eigenschaft EnablePaging
nicht auf festtrue
. Dies führt dazu, dass objectDataSource automatisch eigene startRowIndex - und maximumRows-Parameter in die vorhandene Parameterliste einschließt SelectMethod
. Die EnablePaging
-Eigenschaft ist nützlich, wenn benutzerdefinierte ausgelagerte Daten an ein GridView-, DetailsView- oder FormView-Steuerelement gebunden werden, da diese Steuerelemente ein bestimmtes Verhalten von der ObjectDataSource erwarten, das nur verfügbar ist, wenn EnablePaging
die Eigenschaft ist true
. Da wir die Pagingunterstützung für DataList und Repeater manuell hinzufügen müssen, lassen Sie diese Eigenschaft auf false
(Standard) festgelegt, da wir die erforderlichen Funktionen direkt auf der seite ASP.NET einfügen.
Definieren Sie schließlich die Repeater-S ItemTemplate
, damit der Name, die Kategorie und der Lieferant des Produkts angezeigt werden. Nach diesen Änderungen sollte die deklarative Syntax von Repeater und ObjectDataSource in etwa wie folgt aussehen:
<asp:Repeater ID="Products" runat="server" DataSourceID="ProductsDataSource"
EnableViewState="False">
<ItemTemplate>
<h4><asp:Label ID="ProductNameLabel" runat="server"
Text='<%# Eval("ProductName") %>'></asp:Label></h4>
Category:
<asp:Label ID="CategoryNameLabel" runat="server"
Text='<%# Eval("CategoryName") %>'></asp:Label><br />
Supplier:
<asp:Label ID="SupplierNameLabel" runat="server"
Text='<%# Eval("SupplierName") %>'></asp:Label><br />
<br />
<br />
</ItemTemplate>
</asp:Repeater>
<asp:ObjectDataSource ID="ProductsDataSource" runat="server"
OldValuesParameterFormatString="original_{0}"
SelectMethod="GetProductsPaged" TypeName="ProductsBLL">
<SelectParameters>
<asp:Parameter Name="startRowIndex" Type="Int32" />
<asp:Parameter Name="maximumRows" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>
Nehmen Sie sich einen Moment Zeit, um die Seite über einen Browser zu besuchen, und beachten Sie, dass keine Datensätze zurückgegeben werden. Dies liegt daran, dass wir die Parameterwerte startRowIndex und maximumRows noch angeben müssen. Daher werden werte von 0 für beide übergeben. Um diese Werte anzugeben, erstellen Sie einen Ereignishandler für das ObjectDataSource-Ereignis Selecting
, und legen Sie diese Parameterwerte programmgesteuert auf hartcodierte Werte von 0 bzw. 5 festcodiert fest:
Protected Sub ProductsDataSource_Selecting(sender As Object, _
e As ObjectDataSourceSelectingEventArgs) _
Handles ProductsDataSource.Selecting
e.InputParameters("startRowIndex") = 0
e.InputParameters("maximumRows") = 5
End Sub
Mit dieser Änderung zeigt die Seite, wenn sie über einen Browser angezeigt wird, die ersten fünf Produkte an.
Abbildung 14: Die ersten fünf Datensätze werden angezeigt (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Hinweis
Die in Abbildung 14 aufgeführten Produkte werden zufällig nach Produktnamen sortiert, da die GetProductsPaged
gespeicherte Prozedur, die die effiziente benutzerdefinierte Pagingabfrage ausführt, die Ergebnisse nach ProductName
sortiert.
Damit der Benutzer die Seiten durchlaufen kann, müssen wir den Index der Startzeile und die maximalen Zeilen nachverfolgen und diese Werte über Postbacks hinweg speichern. Im Standardauslagerungsbeispiel haben wir Abfragezeichenfolgenfelder verwendet, um diese Werte beizubehalten. Für diese Demo speichern wir diese Informationen im Ansichtszustand der Seite. Erstellen Sie die folgenden beiden Eigenschaften:
Private Property StartRowIndex() As Integer
Get
Dim o As Object = ViewState("StartRowIndex")
If o Is Nothing Then
Return 0
Else
Return CType(o, Integer)
End If
End Get
Set(ByVal value As Integer)
ViewState("StartRowIndex") = value
End Set
End Property
Private Property MaximumRows() As Integer
Get
Dim o As Object = ViewState("MaximumRows")
If o Is Nothing Then
Return 5
Else
Return CType(o, Integer)
End If
End Get
Set(ByVal value As Integer)
ViewState("MaximumRows") = value
End Set
End Property
Aktualisieren Sie als Nächstes den Code im Selecting-Ereignishandler, sodass die StartRowIndex
Eigenschaften und MaximumRows
anstelle der hartcodierten Werte von 0 und 5 verwendet werden:
e.InputParameters("startRowIndex") = 0
e.InputParameters("maximumRows") = 5
An diesem Punkt zeigt unsere Seite noch nur die ersten fünf Datensätze an. Da diese Eigenschaften jedoch vorhanden sind, können wir unsere Pagingschnittstelle erstellen.
Hinzufügen der Pagingschnittstelle
Wir verwenden dieselbe First-, Previous-, Next- und Last-Paging-Schnittstelle, die im Standard paging-Beispiel verwendet wird, einschließlich des Label Web-Steuerelements, das anzeigt, welche Datenseite angezeigt wird und wie viele Seiten insgesamt vorhanden sind. Fügen Sie die vier Schaltflächenwebsteuerelemente und Bezeichnung unterhalb des Repeaters hinzu.
<p>
<asp:Button runat="server" ID="FirstPage" Text="<< First" />
<asp:Button runat="server" ID="PrevPage" Text="< Prev" />
<asp:Button runat="server" ID="NextPage" Text="Next >" />
<asp:Button runat="server" ID="LastPage" Text="Last >>" />
</p>
<p>
<asp:Label runat="server" ID="CurrentPageNumber"></asp:Label>
</p>
Erstellen Sie Click
als Nächstes Ereignishandler für die vier Schaltflächen. Wenn auf eine dieser Schaltflächen geklickt wird, müssen wir die StartRowIndex
aktualisieren und die Daten erneut an den Repeater binden. Der Code für die Schaltflächen First, Previous und Next ist einfach genug, aber wie bestimmen wir für die Schaltfläche Zuletzt den Startzeilenindex für die letzte Datenseite? Um diesen Index zu berechnen und zu bestimmen, ob die Schaltflächen Weiter und Zuletzt aktiviert werden sollen, müssen wir wissen, wie viele Datensätze insgesamt ausgelagert werden. Wir können dies ermitteln, indem wir die s-Methode der ProductsBLL
Klasse TotalNumberOfProducts()
aufrufen. Erstellen Sie eine schreibgeschützte Eigenschaft auf Seitenebene namens TotalRowCount
, die die Ergebnisse der TotalNumberOfProducts()
Methode zurückgibt:
Private ReadOnly Property TotalRowCount() As Integer
Get
'Return the value from the TotalNumberOfProducts() method
Dim productsAPI As New ProductsBLL()
Return productsAPI.TotalNumberOfProducts()
End Get
End Property
Mit dieser Eigenschaft können wir jetzt den Startzeilenindex der letzten Seite ermitteln. Insbesondere ist es das ganzzahlige Ergebnis von TotalRowCount
minus 1 dividiert durch MaximumRows
, multipliziert mit MaximumRows
. Wir können jetzt die Click
Ereignishandler für die vier Schaltflächen der Pagingschnittstelle schreiben:
Protected Sub FirstPage_Click(sender As Object, e As EventArgs) _
Handles FirstPage.Click
'Return to StartRowIndex of 0 and rebind data
StartRowIndex = 0
Products.DataBind()
End Sub
Protected Sub PrevPage_Click(sender As Object, e As EventArgs) _
Handles PrevPage.Click
'Subtract MaximumRows from StartRowIndex and rebind data
StartRowIndex -= MaximumRows
Products.DataBind()
End Sub
Protected Sub NextPage_Click(sender As Object, e As EventArgs) _
Handles NextPage.Click
'Add MaximumRows to StartRowIndex and rebind data
StartRowIndex += MaximumRows
Products.DataBind()
End Sub
Protected Sub LastPage_Click(sender As Object, e As EventArgs) _
Handles LastPage.Click
'Set StartRowIndex = to last page's starting row index and rebind data
StartRowIndex = ((TotalRowCount - 1) \ MaximumRows) * MaximumRows
Products.DataBind()
End Sub
Schließlich müssen wir die Schaltflächen First und Previous in der Paging-Benutzeroberfläche deaktivieren, wenn die erste Seite der Daten angezeigt wird, und die Schaltflächen Weiter und Zuletzt beim Anzeigen der letzten Seite. Fügen Sie dazu dem ObjectDataSource-Ereignishandler Selecting
den folgenden Code hinzu:
' Disable the paging interface buttons, if needed
FirstPage.Enabled = StartRowIndex <> 0
PrevPage.Enabled = StartRowIndex <> 0
Dim LastPageStartRowIndex As Integer = _
((TotalRowCount - 1) \ MaximumRows) * MaximumRows
NextPage.Enabled = (StartRowIndex < LastPageStartRowIndex)
LastPage.Enabled = (StartRowIndex < LastPageStartRowIndex)
Nachdem Sie diese Click
Ereignishandler und den Code zum Aktivieren oder Deaktivieren der Elemente der Pagingschnittstelle basierend auf dem aktuellen Startzeilenindex hinzugefügt haben, testen Sie die Seite in einem Browser. Wie abbildung 15 veranschaulicht, werden beim ersten Besuch der Seite die Schaltflächen First und Previous deaktiviert. Wenn Sie auf Weiter klicken, wird die zweite Seite der Daten angezeigt, während sie auf Letzte klicken, die letzte Seite anzeigt (siehe Abbildungen 16 und 17). Beim Anzeigen der letzten Datenseite sind sowohl die Schaltflächen Weiter als auch Zuletzt deaktiviert.
Abbildung 15: Die Schaltflächen "Zurück" und "Zuletzt" sind beim Anzeigen der ersten Produktseite deaktiviert (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Abbildung 16: Die zweite Seite der Produkte wird angezeigt (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Abbildung 17: Klicken auf Zuletzt zeigt die letzte Seite der Daten an (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Schritt 7: Einschließlich der Sortierunterstützung mit dem benutzerdefinierten Auslagerungswiederholer
Nachdem das benutzerdefinierte Paging implementiert wurde, sind wir bereit, die Sortierunterstützung einzuschließen. Die ProductsBLL
Methode der Klasse s GetProductsPagedAndSorted
verfügt über die gleichen StartRowIndex - und maximumRows-Eingabeparameter wie GetProductsPaged
, lässt jedoch einen zusätzlichen sortExpression-Eingabeparameter zu. Um die GetProductsPagedAndSorted
-Methode von SortingWithCustomPaging.aspx
verwenden zu können, müssen wir die folgenden Schritte ausführen:
- Ändern Sie die ObjectDataSource-Eigenschaft
SelectMethod
von inGetProductsPaged
GetProductsPagedAndSorted
. - Fügen Sie der ObjectDataSource-Auflistung
SelectParameters
ein sortExpression-ObjektParameter
hinzu. - Erstellen Sie eine private Eigenschaft auf Seitenebene
SortExpression
, die ihren Wert über Postbacks über den Ansichtszustand der Seite hinweg beibehält. - Aktualisieren Sie den ObjectDataSource-Ereignishandler,
Selecting
um dem ObjectDataSource-Parameter sortExpression den Wert der Eigenschaft auf SeitenebeneSortExpression
zuzuweisen. - Erstellen Sie die Sortierschnittstelle.
Aktualisieren Sie zunächst die ObjectDataSource-Eigenschaft, SelectMethod
und fügen Sie eine sortExpressionParameter
hinzu. Stellen Sie sicher, dass die sortExpression-EigenschaftParameter
Type
auf String
festgelegt ist. Nach Abschluss dieser ersten beiden Aufgaben sollte das deklarative Markup des ObjectDataSource-Objekts wie folgt aussehen:
<asp:ObjectDataSource ID="ProductsDataSource" runat="server"
OldValuesParameterFormatString="original_{0}" TypeName="ProductsBLL"
SelectMethod="GetProductsPagedAndSorted"
OnSelecting="ProductsDataSource_Selecting">
<SelectParameters>
<asp:Parameter Name="sortExpression" Type="String" />
<asp:Parameter Name="startRowIndex" Type="Int32" />
<asp:Parameter Name="maximumRows" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>
Als Nächstes benötigen wir eine Eigenschaft auf Seitenebene SortExpression
, deren Wert serialisiert wird, um den Zustand anzuzeigen. Wenn kein Sortierausdruckswert festgelegt wurde, verwenden Sie ProductName als Standard:
Private Property SortExpression() As String
Get
Dim o As Object = ViewState("SortExpression")
If o Is Nothing Then
Return "ProductName"
Else
Return o.ToString()
End If
End Get
Set(ByVal value As String)
ViewState("SortExpression") = value
End Set
End Property
Bevor ObjectDataSource die GetProductsPagedAndSorted
-Methode aufruft, müssen wir sortExpressionParameter
auf den Wert der SortExpression
-Eigenschaft festlegen. Fügen Sie im Selecting
Ereignishandler die folgende Codezeile hinzu:
e.InputParameters("sortExpression") = SortExpression
Es bleibt nur noch die Implementierung der Sortierschnittstelle. Wie im letzten Beispiel wird die Sortierschnittstelle mithilfe von drei Button Web-Steuerelementen implementiert, die es dem Benutzer ermöglichen, die Ergebnisse nach Produktname, Kategorie oder Lieferant zu sortieren.
<asp:Button runat="server" id="SortByProductName"
Text="Sort by Product Name" />
<asp:Button runat="server" id="SortByCategoryName"
Text="Sort by Category" />
<asp:Button runat="server" id="SortBySupplierName"
Text="Sort by Supplier" />
Erstellen Sie Click
Ereignishandler für diese drei Button-Steuerelemente. Setzen Sie im Ereignishandler auf StartRowIndex
0 zurück, legen Sie auf SortExpression
den entsprechenden Wert fest, und binden Sie die Daten erneut an den Repeater:
Protected Sub SortByProductName_Click(sender As Object, e As EventArgs) _
Handles SortByProductName.Click
StartRowIndex = 0
SortExpression = "ProductName"
Products.DataBind()
End Sub
Protected Sub SortByCategoryName_Click(sender As Object, e As EventArgs) _
Handles SortByCategoryName.Click
StartRowIndex = 0
SortExpression = "CategoryName"
Products.DataBind()
End Sub
Protected Sub SortBySupplierName_Click(sender As Object, e As EventArgs) _
Handles SortBySupplierName.Click
StartRowIndex = 0
SortExpression = "CompanyName"
Products.DataBind()
End Sub
Das ist alles, was es gibt! Obwohl es eine Reihe von Schritten gab, um benutzerdefiniertes Paging und Sortierung implementiert zu bekommen, waren die Schritte denen für standard paging sehr ähnlich. Abbildung 18 zeigt die Produkte beim Anzeigen der letzten Datenseite nach Kategorie.
Abbildung 18: Die letzte Seite der Daten, sortiert nach Kategorie, wird angezeigt (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Hinweis
In früheren Beispielen wurde beim Sortieren nach dem Lieferanten SupplierName als Sortierausdruck verwendet. Für die benutzerdefinierte Pagingimplementierung müssen wir jedoch CompanyName verwenden. Dies liegt daran, dass die gespeicherte Prozedur, die für die Implementierung des benutzerdefinierten Pagings GetProductsPagedAndSorted
zuständig ist, den Sortierausdruck an die ROW_NUMBER()
Schlüsselwort (keyword) übergibt. Die ROW_NUMBER()
Schlüsselwort (keyword) erfordert den tatsächlichen Spaltennamen und nicht einen Alias. Daher müssen wir (den Namen der Spalte in der Suppliers
Tabelle) anstelle des Alias verwenden CompanyName
, der in der SELECT
Abfrage (SupplierName
) für den Sortierausdruck verwendet wird.
Zusammenfassung
Weder dataList noch Repeater bieten integrierte Sortierunterstützung, aber mit etwas Code und einer benutzerdefinierten Sortierschnittstelle können solche Funktionen hinzugefügt werden. Beim Implementieren von Sortierung, aber nicht paging, kann der Sortierausdruck über das Objekt angegeben werden, das DataSourceSelectArguments
an die ObjectDataSource-Methode Select
übergeben wird. Diese DataSourceSelectArguments
Objekt-s-Eigenschaft SortExpression
kann im ObjectDataSource-Ereignishandler Selecting
zugewiesen werden.
Um einer DataList oder einem Repeater, der bereits Paging unterstützt, Sortierfunktionen hinzuzufügen, besteht der einfachste Ansatz darin, die Geschäftslogikebene so anzupassen, dass eine Methode enthalten ist, die einen Sortierausdruck akzeptiert. Diese Informationen können dann über einen Parameter in objectDataSource übergeben SelectParameters
werden.
In diesem Tutorial wird die Untersuchung des Pagings und sortierens mit den DataList- und Repeater-Steuerelementen abgeschlossen. In unserem nächsten und letzten Tutorial wird untersucht, wie Button-Websteuerelemente zu den Vorlagen DataList und Repeater hinzugefügt werden, um benutzerdefinierte, vom Benutzer initiierte Funktionen auf Elementbasis bereitzustellen.
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 Hours. Er kann unter mitchell@4GuysFromRolla.comoder über seinen Blog erreicht werden, der unter http://ScottOnWriting.NETzu finden ist.
Besonderer Dank an
Diese Tutorialreihe wurde von vielen hilfreichen Prüfern überprüft. Leitender Prüfer für dieses Tutorial war David Suru. Möchten Sie meine bevorstehenden 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