#727 - Un custom control per la paginazione di Data Controls

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" />


Approfondimenti

Commenti

Esprimi il tuo giudizio su questo script:

Per procedere devi essere autenticato.

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.




IN EVIDENZA
MISC