Suddivisione in pagine e ordinamento dei dati dei report (C#)
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 del 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 una libreria online, potrebbero esserci centinaia di tali libri, ma il report che 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. Anche se le ultime 23 esercitazioni hanno esaminato come creare un'ampia gamma di report, incluse le interfacce che consentono l'aggiunta, la modifica e l'eliminazione di dati, non abbiamo esaminato come ordinare i dati e gli unici esempi di paging che abbiamo visto sono stati con i controlli DetailsView e FormView.
In questa esercitazione verrà illustrato come aggiungere l'ordinamento e il paging ai report, operazione che può essere eseguita semplicemente selezionando alcune caselle di controllo. Sfortunatamente, questa implementazione semplicistica presenta i suoi svantaggi che l'interfaccia di ordinamento lascia un po'per essere desiderata 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 predefinite per il paging e l'ordinamento.
Passaggio 1: Aggiunta del paging e dell'ordinamento delle pagine Web dell'esercitazione
Prima di iniziare questa esercitazione, è prima necessario aggiungere le pagine ASP.NET necessarie per questa esercitazione e le tre successive. Per iniziare, creare una nuova cartella nel progetto denominato PagingAndSorting
. Aggiungere quindi le cinque pagine di ASP.NET seguenti 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 l'esercitazione ASP.NET pagine
Aprire quindi la Default.aspx
pagina e trascinare il SectionLevelTutorialListing.ascx
controllo utente dalla UserControls
cartella nell'area di progettazione. Questo controllo utente, creato nell'esercitazione Pagine master e navigazione sito, enumera la mappa del sito e visualizza tali esercitazioni nella sezione corrente in un elenco puntato.
Figura 2: Aggiungere il controllo Utente SectionLevelTutorialListing.ascx a Default.aspx
Per fare in modo che l'elenco puntato visualizzi le esercitazioni di paging e ordinamento che verranno create, è necessario aggiungerle alla mappa del sito. Aprire il Web.sitemap
file e aggiungere il markup seguente dopo la modifica, l'inserimento e l'eliminazione del markup del nodo della 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 di ASP.NET
Passaggio 2: Visualizzazione delle informazioni sul prodotto in un controllo GridView
Prima di implementare effettivamente le funzionalità di paging e ordinamento, creare prima di tutto un controllo GridView non ordinabile standard non impaginabile che elenca le informazioni sul prodotto. Questa è un'attività eseguita molte volte prima di questa serie di esercitazioni, in modo che questi passaggi debbano essere familiari. Per iniziare, aprire la SimplePagingSorting.aspx
pagina e trascinare un controllo GridView dalla casella degli strumenti nella Designer, impostandone la ID
proprietà su Products
. Creare quindi un nuovo 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 è 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 (nessuno) nell'elenco Drop-Down nelle schede UPDATE, INSERT e DELETE
Successivamente, è possibile personalizzare i campi gridView in modo che vengano visualizzati solo i nomi, i fornitori, le categorie, i prezzi e gli stati sospesi. Inoltre, è possibile apportare modifiche alla formattazione a livello di campo, ad esempio regolare le HeaderText
proprietà o formattare il prezzo come valuta. Dopo queste modifiche, il markup dichiarativo di GridView dovrebbe essere simile al seguente:
<asp:GridView ID="Products" runat="server" AutoGenerateColumns="False"
DataKeyNames="ProductID" DataSourceID="ObjectDataSource1"
EnableViewState="False">
<Columns>
<asp:BoundField DataField="ProductName" HeaderText="Product"
SortExpression="ProductName" />
<asp:BoundField DataField="CategoryName" HeaderText="Category"
ReadOnly="True" SortExpression="CategoryName" />
<asp:BoundField DataField="SupplierName" HeaderText="Supplier"
ReadOnly="True" SortExpression="SupplierName" />
<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 lo stato di avanzamento finora visualizzato tramite un browser. Si noti che la pagina elenca tutti i prodotti in una schermata, che mostra il nome, la categoria, il fornitore, il prezzo e lo stato sospeso di ogni prodotto.
Figura 6: Ogni prodotto è elencato (fare clic per visualizzare l'immagine a dimensione intera)
Passaggio 3: Aggiunta del supporto per il paging
L'elenco di tutti i prodotti in una schermata può causare l'overload delle informazioni per l'utente che usa i dati. Per rendere i risultati più gestibili, è possibile suddividere i dati in pagine più piccole di dati e consentire all'utente di scorrere i dati una pagina alla volta. A tale scopo, selezionare semplicemente la casella di controllo Abilita paging dallo smart tag gridView di GridView (imposta la proprietà true
gridView su AllowPaging
).
Figura 7: Selezionare la casella di controllo Abilita paging per aggiungere il supporto per il paging (fare clic per visualizzare l'immagine a dimensione intera)
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 spostarsi rapidamente da una pagina di dati a un'altra. Questa interfaccia di paging dovrebbe avere un aspetto familiare, come si è visto quando si aggiunge il supporto per il 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 (per impostazione predefinita questa proprietà è pari a 10).
L'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 impostazioni comeBackColor
,ForeColor
,HorizontalAlign
CssClass
, 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 numerici visualizzati nell'interfaccia di paging (il valore predefinito è 10); laMode
proprietà indica il funzionamento dell'interfaccia di paging e può essere impostata su:NextPrevious
mostra i pulsanti Avanti e Indietro, consentendo all'utente di andare avanti 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 di 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 di dati; I pulsanti First/Last vengono visualizzati solo se non è possibile adattare tutti i numeri di pagina numerici
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 di dati PageIndex
sarà uguale a 0. PageCount
, d'altra parte, inizia il conteggio a 1, vale a dire che PageIndex
è limitato ai valori compresi tra 0 e PageCount - 1
.
Dedicare qualche minuto per migliorare l'aspetto predefinito dell'interfaccia di paging di GridView. In particolare, lasciare che l'interfaccia di paging sia allineata a destra con uno sfondo grigio chiaro. Invece di impostare queste proprietà direttamente tramite la proprietà gridView, PagerStyle
è possibile creare una classe CSS in Styles.css
denominata PagerRowStyle
e quindi assegnare la PagerStyle
proprietà s CssClass
tramite il tema. Per iniziare, aprire Styles.css
e aggiungere la definizione di classe CSS seguente:
.PagerRowStyle
{
background-color: #ddd;
text-align: right;
}
Aprire quindi il GridView.skin
file nella DataWebControls
cartella all'interno della App_Themes
cartella . Come illustrato nell'esercitazione pagine master e navigazione nel 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, è possibile configurare l'interfaccia di paging in modo da 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
configurazioni e PagerSettings
sono state effettuate tramite il GridView.skin
file. Si noti che vengono visualizzati solo dieci record e l'interfaccia di paging indica che si sta visualizzando la prima pagina di dati.
Figura 8: con il paging abilitato, viene visualizzato solo un subset dei record alla volta (fare clic per visualizzare l'immagine a dimensione intera)
Quando l'utente fa clic su uno dei numeri di pagina nell'interfaccia di paging, viene eseguito un postback e la pagina viene ricaricata mostrando 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é ci sono 81 record in totale, ottenendo 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 di record appropriato (fare clic per visualizzare l'immagine a dimensione intera)
Flusso di lavoro di paging Server-Side
Quando l'utente finale fa clic su un pulsante nell'interfaccia di paging, viene avviato 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 delle proprietà e
PageSize
diPageIndex
GridView 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 viene comunemente definito paging predefinito, perché è il comportamento di paging usato per impostazione predefinita quando si imposta la AllowPaging
proprietà su true
. Con il paging predefinito il controllo Web dei dati recupera in modo ingenuo tutti i record per ogni pagina di dati, anche se solo un subset di record viene effettivamente sottoposto a 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 di dati richiesta. 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 void Products_DataBound(object sender, EventArgs e)
{
PagingInformation.Text = string.Format("You are viewing page {0} of {1}...",
Products.PageIndex + 1, Products.PageCount);
}
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 (int i = 0; i < Products.PageCount; i++)
{
// Add the new ListItem
ListItem pageListItem = new ListItem(string.Concat("Page ", i + 1), i.ToString());
PageList.Items.Add(pageListItem);
// select the current item, if needed
if (i == Products.PageIndex)
pageListItem.Selected = true;
}
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 void PageList_SelectedIndexChanged(object sender, EventArgs e)
{
// Jump to the specified page
Products.PageIndex = Convert.ToInt32(PageList.SelectedValue);
}
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 void SortPriceDescending_Click(object sender, EventArgs e)
{
// Sort by UnitPrice in descending order
Products.Sort("UnitPrice", SortDirection.Descending);
}
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.