Suddivisione in pagine dei dati dei report in un controllo DataList o Repeater (VB)
Mentre né DataList né Repeater offrono il supporto automatico di paging o ordinamento, questa esercitazione illustra come aggiungere il supporto di paging all'oggetto DataList o Repeater, che consente di visualizzare interfacce di paging e dati molto più flessibili.
Introduzione
Il paging e l'ordinamento sono due funzionalità molto comuni durante la visualizzazione dei dati in un'applicazione online. Ad esempio, quando si cerca ASP.NET libri in un booktore online, potrebbero esserci centinaia di libri, ma il report elenca i risultati della ricerca elenca solo dieci corrispondenze per pagina. Inoltre, i risultati possono essere ordinati in base al titolo, al prezzo, al conteggio delle pagine, al nome dell'autore e così via. Come illustrato nell'esercitazione Relativa al paging e all'ordinamento dei dati del report , i controlli GridView, DetailsView e FormView forniscono tutti il supporto di paging predefinito che può essere abilitato al segno di spunta di una casella di controllo. GridView include anche il supporto per l'ordinamento.
Sfortunatamente, né DataList né Repeater offrono il supporto automatico di paging o ordinamento. In questa esercitazione verrà illustrato come aggiungere il supporto per il paging a DataList o Repeater. È necessario creare manualmente l'interfaccia di paging, visualizzare la pagina appropriata dei record e ricordare che la pagina viene visitata tra postback. Anche se ciò richiede più tempo e codice rispetto a GridView, DetailsView o FormView, DataList e Repeater consentono di visualizzare interfacce di paging e dati molto più flessibili.
Nota
Questa esercitazione si concentra esclusivamente sul paging. Nell'esercitazione successiva si esaminerà l'attenzione per aggiungere funzionalità di ordinamento.
Passaggio 1: Aggiunta di pagine Web di paging e ordinamento
Prima di iniziare questa esercitazione, è prima necessario aggiungere le pagine ASP.NET necessarie per questa esercitazione e quella successiva. Iniziare creando una nuova cartella nel progetto denominato PagingSortingDataListRepeater
. Aggiungere quindi le cinque pagine seguenti ASP.NET a questa cartella, con tutte le pagine configurate per l'uso della pagina Site.master
master :
Default.aspx
Paging.aspx
Sorting.aspx
SortingWithDefaultPaging.aspx
SortingWithCustomPaging.aspx
Figura 1: Creare una PagingSortingDataListRepeater
cartella e aggiungere le pagine di esercitazione ASP.NET
Aprire quindi la Default.aspx
pagina e trascinare il SectionLevelTutorialListing.ascx
controllo utente dalla UserControls
cartella nell'area Progettazione. Questo controllo utente, creato nell'esercitazione Di spostamento pagine master e sito , enumera la mappa del sito e visualizza tali esercitazioni nella sezione corrente in un elenco puntato.
Figura 2: Aggiungere il controllo utente a Default.aspx
(Fare clic per visualizzare l'immagineSectionLevelTutorialListing.ascx
full-size)
Per visualizzare l'elenco puntato, verranno visualizzate le esercitazioni di paging e ordinamento che verranno create, è necessario aggiungerle alla mappa del sito. Aprire il file e aggiungere il Web.sitemap
markup seguente dopo la modifica e l'eliminazione con il markup del nodo mappa del sito DataList:
<siteMapNode
url="~/PagingSortingDataListRepeater/Default.aspx"
title="Paging and Sorting with the DataList and Repeater"
description="Paging and Sorting the Data in the DataList and Repeater Controls">
<siteMapNode
url="~/PagingSortingDataListRepeater/Paging.aspx"
title="Paging"
description="Learn how to page through the data shown
in the DataList and Repeater controls." />
<siteMapNode
url="~/PagingSortingDataListRepeater/Sorting.aspx"
title="Sorting"
description="Sort the data displayed in a DataList or
Repeater control." />
<siteMapNode
url="~/PagingSortingDataListRepeater/SortingWithDefaultPaging.aspx"
title="Sorting with Default Paging"
description="Create a DataList or Repeater control that is paged using
default paging and can be sorted." />
<siteMapNode
url="~/PagingSortingDataListRepeater/SortingWithCustomPaging.aspx"
title="Sorting with Custom Paging"
description="Learn how to sort the data displayed in a DataList or
Repeater control that uses custom paging." />
</siteMapNode>
Figura 3: Aggiornare la mappa del sito per includere le nuove pagine ASP.NET
Revisione del paging
Nelle esercitazioni precedenti è stato illustrato come visualizzare i dati nei controlli GridView, DetailsView e FormView. Questi tre controlli offrono una semplice forma di paging denominata paging predefinito che può essere implementata semplicemente controllando l'opzione Abilita paging nello smart tag del controllo. Con il paging predefinito, ogni volta che viene richiesta una pagina di dati nella prima pagina visita o quando l'utente passa a una pagina diversa di dati, il controllo GridView, DetailsView o FormView richiede nuovamente tutti i dati da ObjectDataSource. Esegue quindi l'interruzione del set specifico di record da visualizzare in base all'indice di pagina richiesto e al numero di record da visualizzare per pagina. Il paging predefinito è stato illustrato in dettaglio nell'esercitazione Relativa al paging e all'ordinamento dei dati del report .
Poiché il paging predefinito richiede nuovamente tutti i record per ogni pagina, non è pratico quando si esegue il paging in quantità sufficientemente elevata di dati. Si supponga, ad esempio, di eseguire il paging di 50.000 record con dimensioni di pagina pari a 10. Ogni volta che l'utente passa a una nuova pagina, tutti i 50.000 record devono essere recuperati dal database, anche se vengono visualizzati solo dieci di essi.
Il paging personalizzato risolve i problemi di prestazioni del paging predefinito afferrando solo il subset preciso di record da visualizzare nella pagina richiesta. Quando si implementa il paging personalizzato, è necessario scrivere la query SQL che restituirà in modo efficiente solo il set corretto di record. È stato illustrato come creare una query di questo tipo usando SQL Server 2005 di nuovo la nuova ROW_NUMBER()
parola chiave nell'esercitazione Di paging efficiente tramite grandi quantità di dati.
Per implementare il paging predefinito nei controlli DataList o Repeater, è possibile usare la classe come wrapper intorno al PagedDataSource
ProductsDataTable
cui contenuto viene eseguito la pagina. La PagedDataSource
classe ha una DataSource
proprietà che può essere assegnata a qualsiasi oggetto enumerabile e PageSize
CurrentPageIndex
proprietà che indicano il numero di record da visualizzare per pagina e l'indice della pagina corrente. Dopo aver impostato queste proprietà, è PagedDataSource
possibile usare come origine dati di qualsiasi controllo Web dati. Se PagedDataSource
enumerato, restituirà solo il subset appropriato di record interni DataSource
in base alle PageSize
proprietà e CurrentPageIndex
. La figura 4 illustra la funzionalità della PagedDataSource
classe.
Figura 4: Esegue il wrapping di un oggetto enumerabile con un'interfaccia PagedDataSource
paginabile
L'oggetto PagedDataSource
può essere creato e configurato direttamente dal livello della logica di business e associato a un oggetto DataList o Repeater tramite ObjectDataSource oppure può essere creato e configurato direttamente nella classe code-behind della pagina ASP.NET. Se viene usato quest'ultimo approccio, è necessario usare ObjectDataSource e associare invece i dati di pagina a DataList o Repeater a livello di codice.
L'oggetto PagedDataSource
include anche proprietà per supportare il paging personalizzato. Tuttavia, è possibile ignorare l'uso di un PagedDataSource
oggetto per il paging personalizzato perché sono già presenti metodi BLL nella ProductsBLL
classe progettati per il paging personalizzato che restituiscono i record precisi da visualizzare.
In questa esercitazione si esaminerà l'implementazione del paging predefinito in un oggetto DataList aggiungendo un nuovo metodo alla ProductsBLL
classe che restituisce un oggetto configurato PagedDataSource
in modo appropriato. Nell'esercitazione successiva verrà illustrato come usare il paging personalizzato.
Passaggio 2: Aggiunta di un metodo di paging predefinito nel livello della logica di business
La ProductsBLL
classe ha attualmente un metodo per restituire tutte le informazioni GetProducts()
sul prodotto e una per restituire un determinato subset di prodotti in corrispondenza di un indice GetProductsPaged(startRowIndex, maximumRows)
iniziale . Con il paging predefinito, GridView, DetailsView e FormView tutti usano il GetProducts()
metodo per recuperare tutti i prodotti, ma quindi usare un PagedDataSource
oggetto internamente per visualizzare solo il subset corretto di record. Per replicare questa funzionalità con i controlli DataList e Repeater, è possibile creare un nuovo metodo nel BLL che simula questo comportamento.
Aggiungere un metodo alla ProductsBLL
classe denominata GetProductsAsPagedDataSource
che accetta due parametri di input integer:
pageIndex
indice della pagina da visualizzare, indicizzato a zero epageSize
numero di record da visualizzare per pagina.
GetProductsAsPagedDataSource
inizia recuperando tutti i record da GetProducts()
. Crea quindi un PagedDataSource
oggetto, impostandone CurrentPageIndex
le proprietà e PageSize
sui valori dei parametri e pageSize
passatipageIndex
. Il metodo termina restituendo questa configurazione PagedDataSource
:
<System.ComponentModel.DataObjectMethodAttribute _
(System.ComponentModel.DataObjectMethodType.Select, False)> _
Public Function GetProductsAsPagedDataSource(ByVal pageIndex As Integer, _
ByVal pageSize As Integer) As PagedDataSource
' Get ALL of the products
Dim products As Northwind.ProductsDataTable = GetProducts()
' Limit the results through a PagedDataSource
Dim pagedData As New PagedDataSource()
pagedData.DataSource = products.Rows
pagedData.AllowPaging = True
pagedData.CurrentPageIndex = pageIndex
pagedData.PageSize = pageSize
Return pagedData
End Function
Passaggio 3: Visualizzazione delle informazioni sul prodotto in un elenco dati usando il paging predefinito
Con il GetProductsAsPagedDataSource
metodo aggiunto alla ProductsBLL
classe, è ora possibile creare un oggetto DataList o Repeater che fornisce il paging predefinito. Iniziare aprendo la Paging.aspx
pagina nella PagingSortingDataListRepeater
cartella e trascinando un oggetto DataList dalla casella degli strumenti nella Designer, impostando la proprietà ProductsDefaultPaging
DataList su ID
. Dallo smart tag di DataList creare un nuovo oggetto ObjectDataSource denominato ProductsDefaultPagingDataSource
e configurarlo in modo da recuperare i dati usando il GetProductsAsPagedDataSource
metodo .
Figura 5: Creare un oggetto ObjectDataSource e configurarlo per usare il metodo (fare clic per visualizzare l'immagineGetProductsAsPagedDataSource
()
a dimensioni complete)
Impostare gli elenchi a discesa nelle schede UPDATE, INSERT e DELETE su (Nessuno).
Figura 6: Impostare la Drop-Down Elenchi nelle schede UPDATE, INSERT e DELETE su (Nessuno) (Fare clic per visualizzare l'immagine a dimensioni complete)
Poiché il metodo prevede due parametri di input, la GetProductsAsPagedDataSource
procedura guidata richiede l'origine di questi valori di parametro.
I valori di indice di pagina e dimensione pagina devono essere ricordati tra postback. Possono essere archiviati nello stato di visualizzazione, mantenuti nella querystring, archiviati nelle variabili di sessione o memorizzati usando alcune altre tecniche. Per questa esercitazione verrà usata la querystring, che offre il vantaggio di consentire l'aggiunta di segnalibri a una determinata pagina di dati.
In particolare, usare i campi querystring pageIndex e pageSize per i pageIndex
parametri e pageSize
rispettivamente (vedere la figura 7). Per impostare i valori predefiniti per questi parametri, i valori querystring non saranno presenti quando un utente visita questa pagina. Per pageIndex
, impostare il valore predefinito su 0 (che mostrerà la prima pagina di dati) e pageSize
il valore predefinito su 4.
Figura 7: Usare QueryString come origine per i pageIndex
parametri e pageSize
(fare clic per visualizzare l'immagine full-size)
Dopo aver configurato ObjectDataSource, Visual Studio crea automaticamente un ItemTemplate
oggetto per DataList. Personalizzare in ItemTemplate
modo che vengano visualizzati solo il nome, la categoria e il fornitore del prodotto. Impostare anche la proprietà DataList s RepeatColumns
su 2, su 100%, Width
e su ItemStyle
Width
50%. Queste impostazioni di larghezza forniscono spaziatura uguale per le due colonne.
Dopo aver apportato queste modifiche, il markup di DataList e ObjectDataSource dovrebbe essere simile al seguente:
<asp:DataList ID="ProductsDefaultPaging" runat="server" Width="100%"
DataKeyField="ProductID" DataSourceID="ProductsDefaultPagingDataSource"
RepeatColumns="2" 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>
<ItemStyle Width="50%" />
</asp:DataList>
<asp:ObjectDataSource ID="ProductsDefaultPagingDataSource" runat="server"
OldValuesParameterFormatString="original_{0}" TypeName="ProductsBLL"
SelectMethod="GetProductsAsPagedDataSource">
<SelectParameters>
<asp:QueryStringParameter DefaultValue="0" Name="pageIndex"
QueryStringField="pageIndex" Type="Int32" />
<asp:QueryStringParameter DefaultValue="4" Name="pageSize"
QueryStringField="pageSize" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>
Nota
Poiché non si esegue alcuna funzionalità di aggiornamento o eliminazione in questa esercitazione, è possibile disabilitare lo stato di visualizzazione di DataList per ridurre le dimensioni della pagina di rendering.
Quando si visita inizialmente questa pagina tramite un browser, non vengono forniti né i pageIndex
pageSize
parametri querystring. Di conseguenza, vengono usati i valori predefiniti 0 e 4. Come illustrato nella figura 8, si ottiene un oggetto DataList che visualizza i primi quattro prodotti.
Figura 8: i primi quattro prodotti sono elencati (fare clic per visualizzare l'immagine full-size)
Senza un'interfaccia di paging, non esiste attualmente alcun mezzo semplice per un utente per passare alla seconda pagina di dati. Verrà creata un'interfaccia di paging nel passaggio 4. Per il momento, tuttavia, il paging può essere eseguito solo specificando direttamente i criteri di paging nella stringa di query. Ad esempio, per visualizzare la seconda pagina, modificare l'URL nella barra degli indirizzi del browser da Paging.aspx
a Paging.aspx?pageIndex=2
e premere INVIO. In questo modo viene visualizzata la seconda pagina di dati (vedere la figura 9).
Figura 9: Viene visualizzata la seconda pagina di dati (fare clic per visualizzare l'immagine a dimensione intera)
Passaggio 4: Creazione dell'interfaccia di paging
È possibile implementare diverse interfacce di paging. I controlli GridView, DetailsView e FormView offrono quattro interfacce diverse tra cui scegliere:
- Successivamente, gli utenti precedenti possono spostare una pagina alla volta, alla successiva o precedente.
- Successivamente, Indietro, Primo, Ultimo oltre ai pulsanti Avanti e Indietro, questa interfaccia include i pulsanti First e Last per passare alla prima o all'ultima pagina.
- Numeric elenca i numeri di pagina nell'interfaccia di paging, consentendo a un utente di passare rapidamente a una determinata pagina.
- Numeric, First, Last oltre ai numeri di pagina numerici, include pulsanti per passare alla prima o all'ultima pagina.
Per DataList e Repeater, siamo responsabili della scelta di un'interfaccia di paging e dell'implementazione. Ciò comporta la creazione dei controlli Web necessari nella pagina e la visualizzazione della pagina richiesta quando si fa clic su un particolare pulsante di interfaccia di paging. Inoltre, alcuni controlli dell'interfaccia di paging potrebbero essere disabilitati. Ad esempio, quando si visualizza la prima pagina di dati usando l'interfaccia Avanti, Precedente, Prima, Ultima, entrambi i pulsanti First e Previous vengono disabilitati.
Per questa esercitazione, usare l'interfaccia Avanti, Precedente, Prima, Ultima. Aggiungere quattro controlli Web Button alla pagina e impostarne ID
i valori su FirstPage
, PrevPage
, NextPage
e LastPage
. Impostare le Text
proprietà su << First, < Prev, Next >e Last >> .
<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 >>" />
Creare quindi un Click
gestore eventi per ognuno di questi pulsanti. In un momento verrà aggiunto il codice necessario per visualizzare la pagina richiesta.
Memorizzazione del numero totale di record sottoposti a paging
Indipendentemente dall'interfaccia di paging selezionata, è necessario calcolare e ricordare il numero totale di record sottoposti a paging. Il numero totale di righe (in combinazione con le dimensioni della pagina) determina il numero totale di pagine di dati di cui viene eseguito il paging, che determina i controlli dell'interfaccia di paging aggiunti o abilitati. Nell'interfaccia Next, Previous, First, Last che si sta creando, il conteggio delle pagine viene usato in due modi:
- Per determinare se si sta visualizzando l'ultima pagina, nel qual caso i pulsanti Avanti e Ultimo sono disabilitati.
- Se l'utente fa clic sul pulsante Ultimo, è necessario eseguirne il whisking nell'ultima pagina, il cui indice è uno minore del numero di pagine.
Il conteggio delle pagine viene calcolato come limite massimo del conteggio totale delle righe diviso per le dimensioni della pagina. Ad esempio, se si esegue il paging tra 79 record con quattro record per pagina, il numero di pagine è 20 (il limite massimo di 79/ 4). Se si usa l'interfaccia di paging numerico, queste informazioni ci informano sul numero di pulsanti di pagina numerici da visualizzare; se l'interfaccia di paging include pulsanti Avanti o Ultima, il conteggio delle pagine viene usato per determinare quando disabilitare i pulsanti Avanti o Ultima.
Se l'interfaccia di paging include un pulsante Ultimo, è fondamentale che il numero totale di record sottoposti a paging venga memorizzato tra i postback, in modo che quando si fa clic sul pulsante Ultimo è possibile determinare l'ultimo indice di pagina. Per semplificare questa operazione, creare una TotalRowCount
proprietà nella classe code-behind della pagina ASP.NET che ne rende persistente il valore per visualizzare lo stato:
Private Property TotalRowCount() As Integer
Get
Dim o As Object = ViewState("TotalRowCount")
If (o Is Nothing) Then
Return -1
Else
Return Convert.ToInt32(o)
End If
End Get
set(Value as Integer)
ViewState("TotalRowCount") = value
End Set
End Property
Oltre a TotalRowCount
, è necessario un minuto per creare proprietà a livello di pagina di sola lettura per accedere facilmente all'indice di pagina, alle dimensioni della pagina e al numero di pagine:
Private ReadOnly Property PageIndex() As Integer
Get
If (Not String.IsNullOrEmpty(Request.QueryString("pageIndex"))) Then
Return Convert.ToInt32(Request.QueryString("pageIndex"))
Else
Return 0
End If
End Get
End Property
Private ReadOnly Property PageSize() As Integer
Get
If (Not String.IsNullOrEmpty(Request.QueryString("pageSize"))) Then
Return Convert.ToInt32(Request.QueryString("pageSize"))
Else
Return 4
End If
End Get
End Property
Private ReadOnly Property PageCount() As Integer
Get
If TotalRowCount <= 0 OrElse PageSize <= 0 Then
Return 1
Else
Return ((TotalRowCount + PageSize) - 1) / PageSize
End If
End Get
End Property
Determinazione del numero totale di record sottoposti a paging
L'oggetto PagedDataSource
restituito dal metodo ObjectDataSource contiene Select()
tutti i record del prodotto, anche se solo un sottoinsieme di essi viene visualizzato in DataList. La PagedDataSource
proprietà s Count
restituisce solo il numero di elementi che verranno visualizzati in DataList. La DataSourceCount
proprietà restituisce il numero totale di elementi all'interno di PagedDataSource
. Pertanto, è necessario assegnare la proprietà della pagina TotalRowCount
ASP.NET il valore della PagedDataSource
proprietà s DataSourceCount
.
A tale scopo, creare un gestore eventi per l'evento ObjectDataSource.Selected
Selected
Nel gestore eventi è possibile accedere al valore restituito del metodo ObjectDataSource in Select()
questo caso, .PagedDataSource
Protected Sub ProductsDefaultPagingDataSource_Selected(ByVal sender As Object, _
ByVal e As System.Web.UI.WebControls.ObjectDataSourceStatusEventArgs) _
Handles ProductsDefaultPagingDataSource.Selected
' Reference the PagedDataSource bound to the DataList
Dim pagedData As PagedDataSource = CType(e.ReturnValue, PagedDataSource)
' Remember the total number of records being paged through across postbacks
TotalRowCount = pagedData.DataSourceCount
End Sub
Visualizzazione della pagina dei dati richiesta
Quando l'utente fa clic su uno dei pulsanti nell'interfaccia di paging, è necessario visualizzare la pagina dei dati richiesta. Poiché i parametri di paging vengono specificati tramite la stringa di query, per visualizzare la pagina richiesta di dati utilizzata Response.Redirect(url)
per richiedere nuovamente la Paging.aspx
pagina al browser dell'utente con i parametri di paging appropriati. Ad esempio, per visualizzare la seconda pagina di dati, l'utente verrà reindirizzato a Paging.aspx?pageIndex=1
.
Per facilitare questa operazione, creare un RedirectUser(sendUserToPageIndex)
metodo che reindirizza l'utente a Paging.aspx?pageIndex=sendUserToPageIndex
. Chiamare quindi questo metodo dai quattro gestori eventi Button Click
. FirstPage
Click
Nel gestore eventi chiamare RedirectUser(0)
, per inviarli alla prima pagina, nelClick
PrevPage
gestore eventi usare PageIndex - 1
come indice di pagina e così via.
Protected Sub FirstPage_Click(ByVal sender As Object, ByVal e As EventArgs) _
Handles FirstPage.Click
' Send the user to the first page
RedirectUser(0)
End Sub
Protected Sub PrevPage_Click(ByVal sender As Object, ByVal e As EventArgs) _
Handles PrevPage.Click
' Send the user to the previous page
RedirectUser(PageIndex - 1)
End Sub
Protected Sub NextPage_Click(ByVal sender As Object, ByVal e As EventArgs) _
Handles NextPage.Click
' Send the user to the next page
RedirectUser(PageIndex + 1)
End Sub
Protected Sub LastPage_Click(ByVal sender As Object, ByVal e As EventArgs) _
Handles LastPage.Click
' Send the user to the last page
RedirectUser(PageCount - 1)
End Sub
Private Sub RedirectUser(ByVal sendUserToPageIndex As Integer)
' Send the user to the requested page
Response.Redirect(String.Format("Paging.aspx?pageIndex={0}&pageSize={1}", _
sendUserToPageIndex, PageSize))
End Sub
Al termine dei Click
gestori eventi, è possibile scorrere i record di DataList facendo clic sui pulsanti. Prenditi un attimo per provarlo!
Disabilitazione dei controlli dell'interfaccia di paging
Attualmente, tutti e quattro i pulsanti sono abilitati indipendentemente dalla pagina visualizzata. Tuttavia, si vogliono disabilitare i pulsanti First e Previous quando vengono visualizzati la prima pagina di dati e i pulsanti Avanti e Ultimo quando viene visualizzata l'ultima pagina. L'oggetto PagedDataSource
restituito dal metodo ObjectDataSource s Select()
ha proprietà IsFirstPage
e IsLastPage
che è possibile esaminare per determinare se si sta visualizzando la prima o l'ultima pagina di dati.
Aggiungere quanto segue al gestore eventi objectDataSource:Selected
' Configure the paging interface based on the data in the PagedDataSource
FirstPage.Enabled = Not pagedData.IsFirstPage
PrevPage.Enabled = Not pagedData.IsFirstPage
NextPage.Enabled = Not pagedData.IsLastPage
LastPage.Enabled = Not pagedData.IsLastPage
Con questa aggiunta, i pulsanti First e Previous verranno disabilitati durante la visualizzazione della prima pagina, mentre i pulsanti Avanti e Ultimo verranno disabilitati durante la visualizzazione dell'ultima pagina.
È possibile completare l'interfaccia di paging informando l'utente della pagina che sta visualizzando e del numero totale di pagine esistenti. Aggiungere un controllo Web Etichetta alla pagina e impostarne la ID
proprietà su CurrentPageNumber
. Impostarne la Text
proprietà nel gestore eventi Selected di ObjectDataSource in modo che includa la pagina corrente visualizzata () e il numero totale di pagine (PageIndex + 1
PageCount
).
' Display the current page being viewed...
CurrentPageNumber.Text = String.Format("You are viewing page {0} of {1}...", _
PageIndex + 1, PageCount)
La figura 10 mostra Paging.aspx
quando viene visitata per la prima volta. Poiché la stringa di query è vuota, per impostazione predefinita DataList vengono visualizzati i primi quattro prodotti; I pulsanti First e Previous sono disabilitati. Facendo clic su Avanti vengono visualizzati i quattro record successivi (vedere la figura 11); I pulsanti First e Previous sono ora abilitati.
Figura 10: Viene visualizzata la prima pagina dei dati (fare clic per visualizzare l'immagine a dimensione intera)
Figura 11: Viene visualizzata la seconda pagina di dati (fare clic per visualizzare l'immagine a dimensione intera)
Nota
L'interfaccia di paging può essere ulteriormente migliorata consentendo all'utente di specificare il numero di pagine da visualizzare per pagina. Ad esempio, è possibile aggiungere un oggetto DropDownList per elencare le opzioni relative alle dimensioni della pagina, ad esempio 5, 10, 25, 50 e Tutte. Quando si seleziona una dimensione di pagina, l'utente deve essere reindirizzato a Paging.aspx?pageIndex=0&pageSize=selectedPageSize
. Lascio l'implementazione di questo miglioramento come esercizio per il lettore.
Uso del paging personalizzato
Le pagine DataList tramite i dati usano la tecnica di paging predefinita inefficiente. Quando si esegue il paging in quantità di dati sufficientemente grandi, è fondamentale usare il paging personalizzato. Anche se i dettagli di implementazione differiscono leggermente, i concetti alla base dell'implementazione del paging personalizzato in un oggetto DataList sono identici a quelli del paging predefinito. Con il paging personalizzato, usare il ProductBLL
metodo della GetProductsPaged
classe (anziché GetProductsAsPagedDataSource
). Come illustrato nell'esercitazione Sul paging efficiente di grandi quantità di dati , GetProductsPaged
è necessario passare l'indice di riga iniziale e il numero massimo di righe da restituire. Questi parametri possono essere mantenuti tramite la stringa di query esattamente come i pageIndex
parametri e pageSize
usati nel paging predefinito.
Poiché non è presente alcun PagedDataSource
paging personalizzato, è necessario usare tecniche alternative per determinare il numero totale di record sottoposti a paging e se viene visualizzata la prima o l'ultima pagina di dati. Il TotalNumberOfProducts()
metodo nella ProductsBLL
classe restituisce il numero totale di prodotti sottoposti a paging. Per determinare se viene visualizzata la prima pagina di dati, esaminare l'indice di riga iniziale se è zero, quindi viene visualizzata la prima pagina. L'ultima pagina viene visualizzata se l'indice di riga iniziale più le righe massime da restituire è maggiore o uguale al numero totale di record di cui viene eseguito il paging.
L'implementazione del paging personalizzato verrà esaminata in modo più dettagliato nell'esercitazione successiva.
Riepilogo
Anche se i controlli DataList e Repeater non offrono il supporto di paging predefinito disponibile nei controlli GridView, DetailsView e FormView, tali funzionalità possono essere aggiunte con un impegno minimo. Il modo più semplice per implementare il paging predefinito consiste nell'eseguire il wrapping dell'intero set di prodotti all'interno di e PagedDataSource
quindi associare a PagedDataSource
DataList o Repeater. In questa esercitazione è stato aggiunto il GetProductsAsPagedDataSource
metodo alla ProductsBLL
classe per restituire .PagedDataSource
La ProductsBLL
classe contiene già i metodi necessari per il paging GetProductsPaged
personalizzato e TotalNumberOfProducts
.
Oltre a recuperare il set preciso di record da visualizzare per il paging personalizzato o tutti i record in un PagedDataSource
per il paging predefinito, è necessario aggiungere manualmente l'interfaccia di paging. Per questa esercitazione è stata creata un'interfaccia Next, Previous, First, Last con quattro controlli Web Button. Inoltre, è stato aggiunto un controllo Etichetta che visualizza il numero di pagina corrente e il numero totale di pagine.
Nell'esercitazione successiva verrà illustrato come aggiungere il supporto per l'ordinamento a DataList e Repeater. Si vedrà anche come creare un oggetto DataList che può essere sia impaginato che ordinato (con esempi che usano il paging predefinito e personalizzato).
Buon programmatori!
Informazioni sull'autore
Scott Mitchell, autore di sette libri ASP/ASP.NET e fondatore di 4GuysFromRolla.com, lavora con le tecnologie Web Microsoft dal 1998. Scott lavora come consulente indipendente, formatore e scrittore. Il suo ultimo libro è Sams Teach Yourself ASP.NET 2.0 in 24 ore. Può essere raggiunto all'indirizzo mitchell@4GuysFromRolla.com. o tramite il suo blog, disponibile all'indirizzo http://ScottOnWriting.NET.
Grazie speciale a
Questa serie di esercitazioni è stata esaminata da molti revisori utili. I revisori principali per questa esercitazione sono stati Liz Shulok, Ken Pespisa e Bernadette Leigh. Interessati a esaminare i prossimi articoli MSDN? In tal caso, lasciami una riga in mitchell@4GuysFromRolla.com.
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per