Un custom control per la paginazione di Data Controls

di Daniele Bochicchio, in ASP.NET, Custom Server Controls, C#,

Un controllo Pager che sia in grado di rendere possibile la creazione di un insieme di link che puntino alle pagine di una ricerca può risultare utile in quasi tutte le applicazioni web, specie quando si abbina all'utilizzo di sistemi di paginazione dei dati direttamente sul database.
Il custom control che segue è un semplice control che accetta 3 parametri in ingresso, costruendo la lista delle pagine con il relativo link.
Va quindi prima creata una classe con questo codice, da compilare in un assembly:

using System;
using System.Text;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace ASPItalia.com.UI.Controls
{
  public class Pager : System.Web.UI.Control
  {
    // numero di pagine
    private int totalPages;
    public int TotalPages
    {
      get {return totalPages;}
      set {totalPages = value;}
    }

    // pagina attuale
    private int pageIndex;
    public int PageIndex
    {
      get {return pageIndex;}
      set {pageIndex = value;}
    }

    // url a cui far puntare
    private string url;
    public string Url
    {
      get {return url;}
      set {url = value;}
    }

    private string text = "<b>{0} pagine in totale:</b>";

    protected override void Render(HtmlTextWriter output)
    {
      output.Write(buildPager());
      base.Render(output);
    }

    // creo il pager
    private string buildPager()
    {
      if (totalPages> 1) 
      {
        StringBuilder lb = new StringBuilder();

        lb.AppendFormat(text, totalPages.ToString());
        lb.Append(" ");

        // pagina precedente
        if (pageIndex>1)
          lb.Append(BuildSinglePage(pageIndex-1, "<b><<</b>"));

        // tutte le pagine
        for (int i = 1; i<=totalPages; i++)
          lb.Append(BuildSinglePage(i, null));

        // pagina successiva
        if (pageIndex < totalPages) 
          lb.Append(BuildSinglePage(pageIndex+1, "<b>>></b>"));

        // restituisco il contenuto del pager
        return lb.ToString();
      }

      return String.Empty;
    }

    // costruisco il link alla singola pagina
    string BuildSinglePage(int i, string text) 
    {
      // se non c'è testo speciale, usiamo il numero di pagina
      if (text == null)
        text = i.ToString();

      return (pageIndex == i)?
        String.Concat("<b>", i.ToString(), "</b> "):
        String.Concat("<a href=\"", String.Format(Url, i.ToString()), "\">", text, "</a> ");
    }

  }
}

Una vola registrato il control sulla pagina, per inserirlo in prossimità dei risultati occorre passare i valori, calcolati dall'estrazione nel database. Eccone un esempio di utilizzo:

<SCRIPT RUNAT="SERVER" LANGUAGE="C#">
void Page_Load()
{
  // estrazione dei dati
  // ....

  // definizione del pager
  // lasciare {0}, sarà sostituito dal control
  pager.Url = "ricerca.aspx?key=" + key + "&p={0}";
  pager.PageIndex = 1
  pager.TotalPages = 15
}
</SCRIPT>
<aspitalia:pager id="pager" runat="server" />

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

I più letti di oggi