Condividi tramite


Suddivisione in pagine e ordinamento dei dati dei report (VB)

di Scott Mitchell

Scarica il PDF

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.mastermaster :

  • Default.aspx
  • SimplePagingSorting.aspx
  • EfficientPaging.aspx
  • SortParameter.aspx
  • CustomSortingUI.aspx

Creare una cartella PagingAndSorting e aggiungere l'esercitazione ASP.NET pagine

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.

Aggiungere il controllo utente SectionLevelTutorialListing.ascx a Default.aspx

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>

Aggiornare la mappa del sito per includere le nuove pagine ASP.NET

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.

Recuperare informazioni su tutti i prodotti usando il metodo GetProducts()

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.

Scegliere l'opzione (Nessuna) nell'elenco Drop-Down nelle 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.

Ognuno dei prodotti è elencato

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).

Selezionare la casella di controllo Abilita paging per aggiungere il supporto per il paging

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:

  • PagerStyleindica le informazioni sullo stile per l'interfaccia di paging; può specificare le impostazioni come BackColor, ForeColorCssClass, 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); la Mode 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 volta
    • NextPreviousFirstLast 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 dati
    • Numeric mostra una serie di numeri di pagina, consentendo all'utente di passare immediatamente a qualsiasi pagina
    • NumericFirstLast 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 PagerStyleCssClass 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_ThemesDataWebControls 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 PagerStylePagerSettings 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.

Con paging abilitato, viene visualizzato solo un subset dei record alla volta

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.

Facendo clic su un numero di pagina viene generato un postback e viene visualizzato il subset appropriato di record

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:

  1. Viene generato l'evento GridView (o DetailsView o FormView) PageIndexChanging
  2. ObjectDataSource richiede nuovamente tutti i dati dal BLL; I valori di proprietà e s PageIndex GridView PageSize vengono usati per determinare quali record restituiti dal BLL devono essere visualizzati in GridView
  3. 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 PagingInformatione 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.

Vengono visualizzati il numero di pagina corrente e il numero totale di pagine

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.

L'utente viene eseguito automaticamente nella sesta pagina quando si seleziona la pagina 6 Drop-Down elemento elenco

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.

Screenshot dell'uso delle esercitazioni sui dati nella pagina Semplice di paging & Ordinamento che mostra i risultati ordinati in base alla colonna Price in ordine crescente.

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:

  1. Viene generato l'evento di ordinamento di GridView
  2. La proprietà GridView s SortExpression è impostata sul campo del quale è stato fatto clic sull'intestazione SortExpression di ordinamento LinkButton
  3. ObjectDataSource recupera nuovamente tutti i dati dal BLL e quindi ordina i dati usando GridView s SortExpression
  4. 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)
  5. 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.

Screenshot della finestra Campi in cui è selezionato il campo Prezzo e la proprietà SortExpression è evidenziata.

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.

Rimuovendo la proprietà SortExpression, gli utenti non possono più ordinare i prodotti per 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 SortPriceDescendinge la relativa IDText 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).

Facendo clic sul pulsante Ordina i prodotti dal più costoso al minimo

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:

  1. Un postback viene seguito
  2. Il controllo Web dei dati genera eventi prelivello (PageIndexChanging o Sorting)
  3. Tutti i dati vengono recuperati di nuovo da ObjectDataSource
  4. Viene generato l'evento post-livello del controllo Web dei dati (PageIndexChanged o Sorted)

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.