Suddivisione in pagine e ordinamento dei dati dei report (VB)
Il paging e l'ordinamento sono due funzionalità molto comuni durante la visualizzazione dei dati in un'applicazione online. In questa esercitazione si esaminerà prima di tutto l'aggiunta dell'ordinamento e il paging ai report, che verranno quindi compilati nelle esercitazioni future.
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. Mentre le ultime 23 esercitazioni hanno esaminato come creare un'ampia gamma di report, tra cui interfacce che consentono l'aggiunta, la modifica e l'eliminazione dei dati, non è stato esaminato come ordinare i dati e gli unici esempi di paging visti sono stati con i controlli DetailsView e FormView.
In questa esercitazione verrà illustrato come aggiungere l'ordinamento e il paging ai report, che possono essere eseguiti semplicemente controllando alcune caselle di controllo. Sfortunatamente, questa implementazione semplicistica presenta gli svantaggi dell'interfaccia di ordinamento lascia un po' da desiderare e le routine di paging non sono progettate per il paging efficiente tramite set di risultati di grandi dimensioni. Le esercitazioni future illustrano come superare le limitazioni delle soluzioni di paging e ordinamento predefinite.
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 le tre successive. Iniziare creando una nuova cartella nel progetto denominato PagingAndSorting
. 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
SimplePagingSorting.aspx
EfficientPaging.aspx
SortParameter.aspx
CustomSortingUI.aspx
Figura 1: Creare una cartella PagingAndSorting e aggiungere le pagine ASP.NET esercitazione
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 User Control SectionLevelTutorialListing.ascx a Default.aspx
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 markup seguente dopo la modifica, l'inserimento e l'eliminazione del Web.sitemap
markup del nodo mappa del sito:
<siteMapNode title="Paging and Sorting" url="~/PagingAndSorting/Default.aspx"
description="Samples of Reports that Provide Paging and Sorting Capabilities">
<siteMapNode url="~/PagingAndSorting/SimplePagingSorting.aspx"
title="Simple Paging & Sorting Examples"
description="Examines how to add simple paging and sorting support." />
<siteMapNode url="~/PagingAndSorting/EfficientPaging.aspx"
title="Efficiently Paging Through Large Result Sets"
description="Learn how to efficiently page through large result sets." />
<siteMapNode url="~/PagingAndSorting/SortParameter.aspx"
title="Sorting Data at the BLL or DAL"
description="Illustrates how to perform sorting logic in the Business Logic
Layer or Data Access Layer." />
<siteMapNode url="~/PagingAndSorting/CustomSortingUI.aspx"
title="Customizing the Sorting User Interface"
description="Learn how to customize and improve the sorting user interface." />
</siteMapNode>
Figura 3: Aggiornare la mappa del sito per includere le nuove pagine ASP.NET
Passaggio 2: Visualizzazione delle informazioni sul prodotto in un controllo GridView
Prima di implementare effettivamente le funzionalità di paging e ordinamento, è prima possibile creare una griglia non ordinabile standard non ordinabile che elenca le informazioni sul prodotto. Questa è un'attività eseguita molte volte prima di questa serie di esercitazioni, in modo che questi passaggi siano familiari. Iniziare aprendo la SimplePagingSorting.aspx
pagina e trascinando un controllo GridView dalla casella degli strumenti nella Designer, impostandone la ID
proprietà su Products
. Creare quindi un nuovo oggetto ObjectDataSource che usa il metodo della GetProducts()
classe ProductsBLL per restituire tutte le informazioni sul prodotto.
Figura 4: Recuperare informazioni su tutti i prodotti usando il metodo GetProducts()
Poiché questo report è un report di sola lettura, non è necessario eseguire il mapping dei metodi ObjectDataSource s Insert()
, Update()
o Delete()
ai metodi corrispondenti ProductsBLL
, quindi scegliere (Nessuno) dall'elenco a discesa per le schede UPDATE, INSERT e DELETE.
Figura 5: Scegliere l'opzione (Nessuna) nell'elenco di Drop-Down nelle schede UPDATE, INSERT ed DELETE
Successivamente, consente di personalizzare i campi gridView in modo che vengano visualizzati solo i nomi dei prodotti, i fornitori, le categorie, i prezzi e gli stati interrotti. Inoltre, è possibile apportare modifiche di formattazione a livello di campo, ad esempio la modifica delle HeaderText
proprietà o la formattazione del prezzo come valuta. Dopo queste modifiche, il markup dichiarativo di GridView dovrebbe essere simile al seguente:
<asp:GridView ID="Products" AutoGenerateColumns="False" DataKeyNames="ProductID"
DataSourceID="ObjectDataSource1" EnableViewState="False" runat="server">
<Columns>
<asp:BoundField DataField="ProductName" HeaderText="Product"
SortExpression="ProductName" />
<asp:BoundField DataField="CategoryName" HeaderText="Category"
SortExpression="CategoryName" ReadOnly="True" />
<asp:BoundField DataField="SupplierName" HeaderText="Supplier"
SortExpression="SupplierName" ReadOnly="True" />
<asp:BoundField DataField="UnitPrice" HeaderText="Price"
SortExpression="UnitPrice" DataFormatString="{0:C}"
HtmlEncode="False" />
<asp:CheckBoxField DataField="Discontinued" HeaderText="Discontinued"
SortExpression="Discontinued" />
</Columns>
</asp:GridView>
La figura 6 mostra finora lo stato di avanzamento quando viene visualizzato tramite un browser. Si noti che la pagina elenca tutti i prodotti in una schermata, che mostra ogni nome, categoria, fornitore, prezzo e stato interrotto.
Figura 6: Ogni prodotto è elencato (fare clic per visualizzare l'immagine a dimensioni complete)
Passaggio 3: Aggiunta del supporto per il paging
L'elenco di tutti i prodotti in una schermata può causare l'overload di informazioni per l'utente peruso dei dati. Per rendere più gestibili i risultati, è possibile suddividere i dati in pagine più piccole di dati e consentire all'utente di eseguire il passaggio dei dati una pagina alla volta. A questo scopo, selezionare semplicemente la casella di controllo Abilita paging dallo smart tag di GridView (in questo modo la proprietà GridView s AllowPaging
su true
).
Figura 7: selezionare la casella di controllo Abilita paging per aggiungere il supporto per il paging (fare clic per visualizzare l'immagine full-size)
L'abilitazione del paging limita il numero di record visualizzati per pagina e aggiunge un'interfaccia di paging a GridView. L'interfaccia di paging predefinita, illustrata nella figura 7, è una serie di numeri di pagina, consentendo all'utente di passare rapidamente da una pagina di dati a un'altra. Questa interfaccia di paging dovrebbe essere familiare, come abbiamo visto quando si aggiunge il supporto di paging ai controlli DetailsView e FormView nelle esercitazioni precedenti.
Entrambi i controlli DetailsView e FormView mostrano solo un singolo record per pagina. GridView, tuttavia, consulta la relativaPageSize
proprietà per determinare il numero di record da visualizzare per pagina (questa proprietà viene impostata per impostazione predefinita su un valore pari a 10).
Questa interfaccia di paging di GridView, DetailsView e FormView può essere personalizzata usando le proprietà seguenti:
PagerStyle
indica le informazioni sullo stile per l'interfaccia di paging; può specificare le impostazioni comeBackColor
,ForeColor
CssClass
,HorizontalAlign
, e così via.PagerSettings
contiene una grande quantità di proprietà che possono personalizzare la funzionalità dell'interfaccia di paging;PageButtonCount
indica il numero massimo di numeri di pagina visualizzati nell'interfaccia di paging (l'impostazione predefinita è 10); laMode
proprietà indica come funziona l'interfaccia di paging e può essere impostata su:NextPrevious
mostra i pulsanti Avanti e Precedente, consentendo all'utente di inoltrare o indietro una pagina alla voltaNextPreviousFirstLast
Oltre ai pulsanti Avanti e Precedente, sono inclusi anche i pulsanti First e Last, consentendo all'utente di passare rapidamente alla prima o all'ultima pagina dei datiNumeric
mostra una serie di numeri di pagina, consentendo all'utente di passare immediatamente a qualsiasi paginaNumericFirstLast
oltre ai numeri di pagina, include i pulsanti First e Last, consentendo all'utente di passare rapidamente alla prima o all'ultima pagina dei dati; I pulsanti First/Last vengono visualizzati solo se tutti i numeri di pagina numerici non possono adattarsi
Inoltre, GridView, DetailsView e FormView offrono tutte le PageIndex
proprietà e PageCount
, che indicano rispettivamente la pagina corrente visualizzata e il numero totale di pagine di dati. La PageIndex
proprietà viene indicizzata a partire da 0, ovvero quando si visualizza la prima pagina dei dati PageIndex
sarà uguale a 0. PageCount
, d'altra parte, inizia il conteggio a 1, il che significa che PageIndex
è limitato ai valori compresi tra 0 e PageCount - 1
.
Per migliorare l'aspetto predefinito dell'interfaccia di paging di GridView, è necessario un momento. In particolare, consente di avere l'interfaccia di paging allineata a destra con uno sfondo grigio chiaro. Anziché impostare queste proprietà direttamente tramite la proprietà GridView, consente di creare una classe CSS in Styles.css
denominata PagerRowStyle
e quindi assegnare la PagerStyle
proprietà s PagerStyle
CssClass
tramite il tema. Iniziare aprendo Styles.css
e aggiungendo la definizione di classe CSS seguente:
.PagerRowStyle
{
background-color: #ddd;
text-align: right;
}
Aprire quindi il GridView.skin
file nella cartella all'interno della App_Themes
DataWebControls
cartella. Come illustrato nell'esercitazione Pagine master e Navigazione sito , è possibile usare i file Skin per specificare i valori predefiniti delle proprietà per un controllo Web. Di conseguenza, aumentare le impostazioni esistenti per includere l'impostazione della PagerStyle
proprietà s CssClass
su PagerRowStyle
. Inoltre, consente di configurare l'interfaccia di paging per visualizzare al massimo cinque pulsanti di pagina numerici usando l'interfaccia NumericFirstLast
di paging.
<asp:GridView runat="server" CssClass="DataWebControlStyle">
<AlternatingRowStyle CssClass="AlternatingRowStyle" />
<RowStyle CssClass="RowStyle" />
<HeaderStyle CssClass="HeaderStyle" />
<FooterStyle CssClass="FooterStyle" />
<SelectedRowStyle CssClass="SelectedRowStyle" />
<PagerStyle CssClass="PagerRowStyle" />
<PagerSettings Mode="NumericFirstLast" PageButtonCount="5" />
</asp:GridView>
Esperienza utente di paging
La figura 8 mostra la pagina Web quando viene visitata tramite un browser dopo che la casella di controllo Abilita paging di GridView è stata selezionata e le PagerStyle
PagerSettings
configurazioni e sono state eseguite tramite il GridView.skin
file. Si noti come vengono visualizzati solo dieci record e l'interfaccia di paging indica che viene visualizzata la prima pagina dei dati.
Figura 8: con paging abilitato, viene visualizzato solo un subset dei record alla volta (fare clic per visualizzare un'immagine a dimensioni complete)
Quando l'utente fa clic su uno dei numeri di pagina nell'interfaccia di paging, viene eseguito un postback e viene ricaricato la pagina che mostra i record della pagina richiesti. La figura 9 mostra i risultati dopo aver scelto di visualizzare la pagina finale dei dati. Si noti che la pagina finale ha un solo record; questo perché sono presenti 81 record in totale, causando otto pagine di 10 record per pagina più una pagina con un record solitario.
Figura 9: facendo clic su un numero di pagina viene generato un postback e viene visualizzato il subset appropriato di record (fare clic per visualizzare l'immagine a dimensioni complete)
Paging di Server-Side flusso di lavoro
Quando l'utente finale fa clic su un pulsante nell'interfaccia di paging, viene eseguito un postback e inizia il flusso di lavoro sul lato server seguente:
- Viene generato l'evento GridView (o DetailsView o FormView)
PageIndexChanging
- ObjectDataSource richiede nuovamente tutti i dati dal BLL; I valori di proprietà e s
PageIndex
GridViewPageSize
vengono usati per determinare quali record restituiti dal BLL devono essere visualizzati in GridView - Viene generato l'evento GridView
PageIndexChanged
Nel passaggio 2, ObjectDataSource richiede nuovamente tutti i dati dall'origine dati. Questo stile di paging è comunemente definito paging predefinito, poiché è il comportamento di paging usato per impostazione predefinita quando si imposta la AllowPaging
proprietà su true
. Con il paging predefinito il controllo Web dati recupera in modo ingenuo tutti i record per ogni pagina di dati, anche se solo un subset di record viene effettivamente eseguito il rendering nel codice HTML inviato al browser. A meno che i dati del database non vengano memorizzati nella cache da BLL o ObjectDataSource, il paging predefinito non è utilizzabile per set di risultati sufficientemente grandi o per le applicazioni Web con molti utenti simultanei.
Nell'esercitazione successiva verrà illustrato come implementare il paging personalizzato. Con il paging personalizzato è possibile indicare in modo specifico a ObjectDataSource di recuperare solo il set preciso di record necessari per la pagina richiesta di dati. Come si può immaginare, il paging personalizzato migliora notevolmente l'efficienza del paging tramite set di risultati di grandi dimensioni.
Nota
Anche se il paging predefinito non è adatto quando si esegue il paging in set di risultati sufficientemente grandi o per i siti con molti utenti simultanei, si rende conto che il paging personalizzato richiede più modifiche e sforzo per implementare e non è semplice come controllare una casella di controllo (come è il paging predefinito). Pertanto, il paging predefinito può essere la scelta ideale per siti Web di piccole dimensioni, a basso traffico o quando si esegue il paging attraverso set di risultati relativamente piccoli, in quanto è molto più semplice e rapido da implementare.
Ad esempio, se si sa che non saranno mai presenti più di 100 prodotti nel database, il miglioramento minimo delle prestazioni apprezzato dal paging personalizzato è probabilmente compensato dallo sforzo necessario per implementarlo. Se, tuttavia, è possibile che un giorno abbiano migliaia o decine di migliaia di prodotti, non implementando paging personalizzato sarebbe notevolmente impedita la scalabilità dell'applicazione.
Passaggio 4: Personalizzazione dell'esperienza di paging
I controlli Web dati forniscono una serie di proprietà che possono essere usate per migliorare l'esperienza di paging dell'utente. La PageCount
proprietà, ad esempio, indica il numero di pagine totali presenti, mentre la PageIndex
proprietà indica la pagina corrente visitata e può essere impostata per spostare rapidamente un utente in una pagina specifica. Per illustrare come usare queste proprietà per migliorare l'esperienza di paging dell'utente, è possibile aggiungere un controllo Web Label alla pagina che informa l'utente che sta visitando, insieme a un controllo DropDownList che consente di passare rapidamente a qualsiasi pagina specificata.
Per prima cosa, aggiungere un controllo Web Label alla pagina, impostarne la ID
proprietà su PagingInformation
e cancellarne la Text
proprietà. Creare quindi un gestore eventi per l'evento GridView e DataBound
aggiungere il codice seguente:
Protected Sub Products_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles Products.DataBound
PagingInformation.Text = String.Format("You are viewing page {0} of {1}...", _
Products.PageIndex + 1, Products.PageCount)
End Sub
Questo gestore eventi assegna la PagingInformation
proprietà Label s Text
a un messaggio che informa l'utente che sta attualmente visitando Products.PageIndex + 1
il numero di pagine Products.PageCount
totali (si aggiunge 1 alla Products.PageIndex
proprietà perché PageIndex
è indicizzato a partire da 0). Ho scelto la proprietà assegna questa proprietà Label Text
nel DataBound
gestore eventi anziché al PageIndexChanged
gestore eventi perché l'evento viene generato ogni volta che i DataBound
dati vengono associati a GridView mentre il PageIndexChanged
gestore eventi viene generato solo quando l'indice della pagina viene modificato. Quando GridView è inizialmente associato ai dati nella prima pagina visita, l'evento PageIndexChanging
non viene generato (mentre l'evento DataBound
viene eseguito).
Con questa aggiunta, l'utente viene ora visualizzato un messaggio che indica la pagina che visitano e il numero totale di pagine di dati presenti.
Figura 10: il numero di pagina corrente e il numero totale di pagine vengono visualizzati (fare clic per visualizzare l'immagine full-size)
Oltre al controllo Etichetta, consente di aggiungere anche un controllo DropDownList che elenca i numeri di pagina in GridView con la pagina attualmente visualizzata selezionata. L'idea è che l'utente può passare rapidamente dalla pagina corrente a un'altra selezionando semplicemente il nuovo indice di pagina dall'elenco a discesa. Iniziare aggiungendo un elenco a discesa al Designer, impostandone ID
la proprietà PageList
su e controllando l'opzione Abilita AutoPostBack dal relativo smart tag.
Tornare quindi al DataBound
gestore eventi e aggiungere il codice seguente:
' Clear out all of the items in the DropDownList
PageList.Items.Clear()
' Add a ListItem for each page
For i As Integer = 0 To Products.PageCount - 1
' Add the new ListItem
Dim pageListItem As New ListItem(String.Concat("Page ", i + 1), i.ToString())
PageList.Items.Add(pageListItem)
' select the current item, if needed
If i = Products.PageIndex Then
pageListItem.Selected = True
End If
Next
Questo codice inizia cancellando gli elementi nell'elenco PageList
a discesa. Questo può sembrare superfluo, poiché non si prevede che il numero di pagine venga modificato, ma altri utenti possono usare il sistema contemporaneamente, aggiungendo o rimuovendo record dalla Products
tabella. Tali inserimenti o eliminazioni potrebbero modificare il numero di pagine di dati.
Successivamente, è necessario creare di nuovo i numeri di pagina e avere quello che esegue il mapping all'oggetto GridView PageIndex
corrente selezionato per impostazione predefinita. Questa operazione viene eseguita con un ciclo compreso tra 0 e PageCount - 1
, aggiungendo un nuovo ListItem
oggetto in ogni iterazione e impostando la relativa Selected
proprietà su true se l'indice di iterazione corrente equivale alla proprietà GridView.PageIndex
Infine, è necessario creare un gestore eventi per l'evento DropDownList SelectedIndexChanged
, che viene generato ogni volta che l'utente sceglie un elemento diverso dall'elenco. Per creare questo gestore eventi, fare doppio clic su DropDownList nella Designer, quindi aggiungere il codice seguente:
Protected Sub PageList_SelectedIndexChanged(sender As Object, e As System.EventArgs) _
Handles PageList.SelectedIndexChanged
' Jump to the specified page
Products.PageIndex = Convert.ToInt32(PageList.SelectedValue)
End Sub
Come illustrato nella figura 11, la semplice modifica della proprietà GridView PageIndex
causa il rebound dei dati in GridView. Nel gestore eventi di GridView viene DataBound
selezionato l'elenco a discesa ListItem
appropriato.
Figura 11: l'utente viene automaticamente preso nella sesta pagina quando si seleziona l'elemento elenco pagina 6 Drop-Down (fare clic per visualizzare l'immagine a dimensioni complete)
Passaggio 5: Aggiunta del supporto di ordinamento Bi-Directional
L'aggiunta del supporto di ordinamento bidirezionale è semplice come l'aggiunta del supporto per il paging, è sufficiente controllare l'opzione Abilita ordinamento dallo smart tag di GridView (che imposta la proprietà GridView s AllowSorting
su true
). In questo modo viene eseguito il rendering di ognuna delle intestazioni dei campi GridView s come LinkButtons che, quando si fa clic, causa un postback e restituisce i dati ordinati dalla colonna selezionata in ordine crescente. Facendo clic sulla stessa intestazione LinkButton, riordina nuovamente i dati in ordine decrescente.
Nota
Se si usa un livello di accesso dati personalizzato anziché un dataset tipizzato, potrebbe non essere disponibile un'opzione Abilita ordinamento nello smart tag di GridView. Solo GridViews associato a origini dati che supportano l'ordinamento in modo nativo hanno questa casella di controllo disponibile. Typed DataSet fornisce supporto per l'ordinamento out-of-the-box poiché l'ADO.NET DataTable fornisce un Sort
metodo che, quando richiamato, ordina i DataRows di DataTable usando i criteri specificati.
Se il servizio di ordinamento non restituisce oggetti che supportano in modo nativo l'ordinamento, è necessario configurare ObjectDataSource per passare le informazioni di ordinamento al livello di logica di business, che può ordinare i dati o disporre dei dati ordinati da DAL. Verrà illustrato come ordinare i dati in Business Logic and Data Access Layer in un'esercitazione futura.
L'ordinamento di LinkButton viene eseguito come collegamenti ipertestuali HTML, i cui colori correnti (blu per un collegamento non visualizzato e un rosso scuro per un collegamento visitato) si scontrano con il colore di sfondo della riga di intestazione. Invece, consenti di avere tutti i collegamenti di riga di intestazione visualizzati in bianco, indipendentemente dal fatto che siano stati visitati o meno. Questa operazione può essere eseguita aggiungendo quanto segue alla Styles.css
classe:
.HeaderStyle a, .HeaderStyle a:visited
{
color: White;
}
Questa sintassi indica di usare il testo bianco durante la visualizzazione di tali collegamenti ipertestuali all'interno di un elemento che usa la classe HeaderStyle.
Dopo questa aggiunta CSS, quando si visita la pagina tramite un browser lo schermo dovrebbe essere simile alla figura 12. In particolare, la figura 12 mostra i risultati dopo che è stato fatto clic sul collegamento intestazione del campo Prezzo.
Figura 12: i risultati sono stati ordinati da UnitPrice nell'ordine crescente (fare clic per visualizzare l'immagine a dimensioni complete)
Esame del flusso di lavoro di ordinamento
Tutti i campi GridView, BoundField, CheckBoxField, TemplateField e così via hanno una SortExpression
proprietà che indica l'espressione che deve essere usata per ordinare i dati quando viene fatto clic sul collegamento di intestazione di ordinamento del campo. GridView ha anche una SortExpression
proprietà. Quando viene fatto clic su un'intestazione di ordinamento LinkButton, GridView assegna il valore del SortExpression
campo alla relativa SortExpression
proprietà. Successivamente, i dati vengono recuperati nuovamente dall'oggetto ObjectDataSource e ordinati in base alla proprietà GridView s SortExpression
. L'elenco seguente illustra in dettaglio la sequenza di passaggi che traspiri quando un utente finale ordina i dati in Un controllo GridView:
- Viene generato l'evento di ordinamento di GridView
- La proprietà GridView s
SortExpression
è impostata sul campo del quale è stato fatto clic sull'intestazioneSortExpression
di ordinamento LinkButton - ObjectDataSource recupera nuovamente tutti i dati dal BLL e quindi ordina i dati usando GridView s
SortExpression
- La proprietà GridView s
PageIndex
viene reimpostata su 0, ovvero quando si ordina l'utente viene restituita alla prima pagina dei dati (presupponendo che sia stato implementato il supporto per il paging) - Viene generato l'evento GridView
Sorted
Come per il paging predefinito, l'opzione di ordinamento predefinito recupera tutti i record dal BLL. Quando si usa l'ordinamento senza paging o quando si usa l'ordinamento con il paging predefinito, non è possibile aggirare questo colpo di prestazioni (breve di memorizzazione nella cache dei dati del database). Tuttavia, come si vedrà in un'esercitazione futura, è possibile ordinare in modo efficiente i dati quando si usa il paging personalizzato.
Quando si associa un oggetto ObjectDataSource a GridView tramite l'elenco a discesa nello smart tag gridView, ogni campo GridView ha automaticamente la proprietà SortExpression
assegnata al nome del campo dati nella ProductsRow
classe. Ad esempio, l'oggetto ProductName
BoundField s SortExpression
è impostato su ProductName
, come illustrato nel markup dichiarativo seguente:
<asp:BoundField DataField="ProductName" HeaderText="Product"
SortExpression="ProductName" />
Un campo può essere configurato in modo che non sia ordinabile cancellando la relativa SortExpression
proprietà (assegnandola a una stringa vuota). Per illustrare questo, immaginare che non volevamo lasciare che i nostri clienti ordinano i nostri prodotti in base al prezzo. La UnitPrice
proprietà BoundField s SortExpression
può essere rimossa dal markup dichiarativo o dalla finestra di dialogo Campi , accessibile facendo clic sul collegamento Modifica colonne nello smart tag gridView.
Figura 13: i risultati sono stati ordinati da UnitPrice nell'ordine crescente
Dopo aver rimosso la SortExpression
proprietà per BoundField, l'intestazione UnitPrice
viene eseguita come testo anziché come collegamento, impedendo così agli utenti di ordinare i dati in base al prezzo.
Figura 14: Rimuovendo la proprietà SortExpression, gli utenti non possono più ordinare i prodotti per prezzo (fare clic per visualizzare l'immagine a dimensioni complete)
Ordinamento a livello di codice di GridView
È anche possibile ordinare il contenuto di GridView a livello di codice usando il metodo GridView.Sort
È sufficiente passare il SortExpression
valore per ordinare insieme SortDirection
a (Ascending
o Descending
) e i dati di GridView verranno riordinati.
Si supponga che il motivo per cui abbiamo disattivato l'ordinamento in base al UnitPrice
fatto che eravamo preoccupati che i nostri clienti acquistassero semplicemente solo i prodotti a prezzo più basso. Tuttavia, vogliamo incoraggiarli a comprare i prodotti più costosi, quindi vorremmo che possano ordinare i prodotti in base al prezzo, ma solo dal prezzo più costoso al minimo.
A tale scopo, aggiungere un controllo Web Button alla pagina, impostare la relativa proprietà su SortPriceDescending
e la relativa ID
Text
proprietà su Ordina per prezzo. Creare quindi un gestore eventi per l'evento Button s Click
facendo doppio clic sul controllo Pulsante nella Designer. Aggiungere il codice seguente al gestore eventi:
Protected Sub SortPriceDescending_Click(sender As Object, e As System.EventArgs) _
Handles SortPriceDescending.Click
'Sort by UnitPrice in descending order
Products.Sort("UnitPrice", SortDirection.Descending)
End Sub
Facendo clic su questo pulsante, l'utente viene restituito alla prima pagina con i prodotti ordinati in base al prezzo, dal più costoso al meno costoso (vedere la figura 15).
Figura 15: fare clic sul pulsante Ordina i prodotti dal più costoso al minimo (fare clic per visualizzare l'immagine full-size)
Riepilogo
In questa esercitazione è stato illustrato come implementare le funzionalità di paging e ordinamento predefinite, entrambe le quali erano semplici come controllare una casella di controllo. Quando un utente ordina o pagine tramite dati, un flusso di lavoro simile si svolge:
- Un postback viene seguito
- Il controllo Web dei dati genera eventi prelivello (
PageIndexChanging
oSorting
) - Tutti i dati vengono recuperati di nuovo da ObjectDataSource
- Viene generato l'evento post-livello del controllo Web dei dati (
PageIndexChanged
oSorted
)
Durante l'implementazione di paging di base e l'ordinamento è una brezza, è necessario esercitare più sforzo per utilizzare il paging personalizzato più efficiente o per migliorare ulteriormente l'interfaccia di paging o ordinamento. Le esercitazioni future esamineranno questi argomenti.
Programmazione felice!
Informazioni sull'autore
Scott Mitchell, autore di sette libri ASP/ASP.NET e fondatore di 4GuysFromRolla.com, ha lavorato con le tecnologie Microsoft Web dal 1998. Scott lavora come consulente indipendente, allenatore e scrittore. Il suo ultimo libro è Sams Teach Yourself ASP.NET 2,0 in 24 Ore. Può essere raggiunto a mitchell@4GuysFromRolla.com. o tramite il suo blog, che può essere trovato in http://ScottOnWriting.NET.