Paginare un datagrid con ASP.NET e ADO.NET

di Andrea Zani, in ASP.NET,

Per chi è ormai addentro nell'uso dei database con le ASP tradizionali il concetto di paginazione è un argomento noto. ADO permette una sua facile gestione (che ricordo permette di dividere il risultato di una semplice query su più pagine) grazie alle proprietà "PageSize", "AbsolutePage", "PageCount" dell'oggetto recorset. Per maggiori informazioni a riguardo consiglio la lettura dell'articolo di Luca Milan presente su questo stesso sito.
Anche se molto intuitivo, ogni singolo punto seguente comporta sempre un certo "lavoro" da parte del programmatore per la scrittura di codice:

  • controllare quanti record ha restituito la query;
  • visualizzare il contenuto del database nel numero esatto di record della pagina;
  • inserire l'eventuale link per tornare alla pagina precedente se non si è nella prima pagina;
  • inserire l'eventuale link per la pagina successiva se non si è all'ultima pagina.

Con ASP.NET possiamo risparmiarci gran parte del lavoro.
Se visualizziamo il contenuto di una tabella con il "Datagrid" (per esempi sul suo utilizzo consiglio la lettura dell'articolo di Matteo Stori) è possibile effettuare la paginazione in automatico, impostando la proprietà "AllowPaging" a "True".
In questo modo sarà il motore ASP.NET a scrivere il codice HTML e JavaScript contenente la tabella con i record da noi previsti e con gli eventuali link per passare da una pagina all'altra, senza nessun altro sforzo o aggiunta da parte nostra.

Estrazione dal database

In questo primo esempio presente nell'allegato di questo articolo, lo script visualizza il datagrid di una tabella presente nel database contenente 150 record, 15 alla volta. Il datagrid ha questa struttura:

 <ASP:DataGrid id="MyDataGrid" runat="server"     Width="100%"
    BackColor="#ccccff" 
    BorderColor="black"
    ShowFooter="false" 
    cellpadding=3 
    cellspacing="0"
    Font-Name="Verdana"
    Font-Size="8pt"
    HeaderStyle-BackColor="#aaaadd"
    alternatingItemStyle-BackColor="#aaaadd"
    AllowPaging="True"
    AllowCustomPaging="false"
    PageSize="15"
    OnPageIndexChanged="saltapagina">
    < PagerStyle Mode="NextPrev" HorizontalAlign="Right" Position="top"
        ForeColor="White" BackColor="#9a5162" 
        NextPageText="Next Page >>" PrevPageText=" <  <  Prev. Page">
    < /PagerStyle>
 < /asp:datagrid>

Da notare le proprietà "alternatingItemStyle-BackColor", "AllowPaging", "AllowCustomPaging", "PageSize", "PagerStyle". La prima imposta il colore di fondo delle celle per le righe dispari in modo completamente automatico. "AllowPaging" imposta la paginazione del datagrid. "AllowCustomPaging" verrà esaminata in maniera approfondita con il terzo esempio, ma per questo esempio dovrà essere impostato a "False". "PageSize" è il numero di record da visualizzare per pagina. "PagerStyle" imposta la visualizzazione dei link per saltare da una pagina all'altra.
Un'altra proprietà fondamentale per l'utilizzo della paginazione è "OnPageIndexChanged". In essa dovremo scrivere il nome della Sub che elaborerà il salto pagina.
Questa è la subroutine che inserisce il contenuto della tabella1 nel datagrid:

 sub binddata()
    Dim DS As DataSet
    Dim MyConnection as OleDbConnection
    Dim MyCommand As OleDbDataAdapter
    Dim quanti as integer

    MyConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source="+server.mappath("database.mdb"))

    MyConnection.Open()
    MyCommand = New OleDbDataAdapter("select * from tabella1", MyConnection)
    DS = new DataSet()
    MyCommand.Fill(ds, "tabella1")
    ' in quanti viene inserito il numero di record della tabella
    quanti = ds.Tables("tabella1").Rows.Count.ToString()
    dim source as dataview=ds.Tables("tabella1").DefaultView
    MyDataGrid.DataSource=source
    MyDataGrid.DataBind()
    MyConnection.close()
    lblMessage.Text = "Pagina " & MyDataGrid.CurrentPageIndex+1 & _
        " di " & MyDataGrid.PageCount & _
        ". Record presenti=" & quanti
End Sub

La sub chiamata quando l'utente deciderà di passare ad altre pagine (inserito in "OnPageIndexChanged" nel datagrid), è la seguente:

 sub saltapagina(sender as Object , e as DataGridPageChangedEventArgs)
    MyDataGrid.CurrentPageIndex = e.NewPageIndex
    binddata()
end sub

Una volta richiamato dal nostro browser questa pagina, otterremo questo risultato:

Immagine

In altro a destra i link per saltare da una pagina all'altra, in basso il numero di pagina attuale e i record presenti. Tutto con poche righe di codice.

2 pagine in totale: 1 2

Attenzione: Questo articolo contiene un allegato.

Contenuti dell'articolo

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti