Domanda

Sto cercando un controllo di paging decente in ASP.NET, proprio come il cercapersone StackOverflow. Qualcuno può consigliarne uno?

Preferirei uno che non usasse neanche Postback, solo una querystring personalizzabile.

È stato utile?

Soluzione 2

Mi aspettavo più risposte ma sembra che molte persone ne facciano le proprie. Ne ho trovato uno decente che viene mantenuto abbastanza spesso su codeproject.com

cp

Non è esattamente uguale a quello di stackoverflow.com. Sarebbe bello se ci fosse un discreto controllo open source che avesse una varietà di diverse opzioni di output.

Altri suggerimenti

È abbastanza facile realizzarne uno tuo. Ho creato un semplice controllo utente basato sul cercapersone di overflow dello stack con due proprietà ...

  1. Numero totale di pagine disponibili in base ai dati sottostanti
  2. Numero di link da mostrare

La pagina selezionata viene determinata leggendo la stringa della query. La sfida più grande è stata la modifica dell'URL con il nuovo numero di pagina. Questo metodo utilizza un parametro della stringa di query 'p' per specificare quale pagina visualizzare ...

string getLink(int toPage)
{
    NameValueCollection query = HttpUtility.ParseQueryString(Request.Url.Query);
    query["p"] = toPage.ToString();

    string url = Request.Path;

    for(int i = 0; i < query.Count; i++)
    {
        url += string.Format("{0}{1}={2}", 
            i == 0 ? "?" : "&", 
            query.Keys[i], 
            string.Join(",", query.GetValues(i)));
    }

    return url;
}

Una semplice formula per determinare l'intervallo dei numeri di pagina da mostrare ...

int min = Math.Min(Math.Max(0, Selected - (PageLinksToShow / 2)), Math.Max(0, PageCount - PageLinksToShow + 1));
int max = Math.Min(PageCount, min + PageLinksToShow);

Ogni collegamento viene quindi generato usando qualcosa del tipo (dove min e max specificano l'intervallo di collegamenti di pagina da creare) ...

for (int i = min; i <= max; i++)
{
    HyperLink btn = new HyperLink();
    btn.Text = (i + 1).ToString();
    btn.NavigateUrl = getLink(i);
    btn.CssClass = "pageNumbers" + (Selected == i ? " current" : string.Empty);
    this.Controls.Add(btn);
}

Si possono anche creare pulsanti "Precedente" (e "Successivo") ...

HyperLink previous = new HyperLink();
previous.Text = "Previous";
previous.NavigateUrl = getLink(Selected - 1);

Il primo e l'ultimo pulsante sono diretti ...

HyperLink previous = new HyperLink();
previous.Text = "1";
first.NavigateUrl = getLink(0);

Nel determinare quando mostrare " ... " ;, mostra un controllo letterale quando l'intervallo di collegamenti non è vicino alla prima o all'ultima pagina ...

if (min > 0)
{
    Literal spacer = new Literal();
    spacer.Text = "&hellip;";
    this.Controls.Add(spacer);
}

Fai lo stesso per sopra per " max < PageCount quot &;.

Tutto questo codice viene inserito in un metodo di sostituzione di CreateChildControls.

Ho lavorato con i controlli di pagina DevExpress e Telerik e preferisco il cercapersone DevExpress. Non sono sicuro se il cercapersone DevExpress può funzionare direttamente con una stringa di query ma sarei sorpreso se non lo facesse perché è molto flessibile. Per quanto riguarda il paging tra le pagine esistenti dopo il download, tutto può risiedere sul client o, se è necessario un viaggio sul server, il controllo è completamente equipaggiato con AJAX. Ti suggerisco di iniziare la tua ricerca su www.devexpress.com e di controllare anche www.Telerik.com (che è anche dotato di AJAX).

Non è un controllo, ma questo è il modo di implementare il paging a livello di DB: Paging di SQL Server 2005

Ho scritto un controllo cercapersone chiamato: Flexy Pager
Per saperne di più: http: //www.codeproject .com / articoli / 748.270 / Flexy-Pager-per-ASP-NET-WebForm-MVC

inserisci qui la descrizione dell'immagine

Puoi provare NPager . Utilizza una stringa di query per gli indici di pagina, senza postback. Ha bisogno di Bootstrap per lo styling, tuttavia puoi avere le tue classi css personalizzate per il controllo usando la classe CSS 'paginazione'. Ecco una DEMO

 inserisci qui la descrizione dell'immagine

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top