2009-03-16 27 views
14

Sto cercando un controllo di paging decente in ASP.NET, proprio come il cercapersone Stackoverflow. Qualcuno può raccomandarne uno?Controllo impaginazione ASP.NET

Preferirei uno che non ha utilizzato Postback, solo una querystring personalizzabile.

risposta

4

Mi aspettavo più risposte, ma sembra che molte persone le facciano proprie. Ho trovato una decente che viene mantenuto abbastanza spesso su codeproject.com

cp

Non è proprio la stessa cosa come lo stackoverflow.com uno.Sarebbe bello se ci fosse un discreto controllo open source che avesse una varietà di opzioni di output differenti.

2

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 querystring, ma sarei sorpreso se non lo facesse in quanto è 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 dotato di AJAX. Suggerisco di iniziare la ricerca su www.devexpress.com e poi controllare anche su www.Telerik.com (che è anche dotato di AJAX).

2

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

+0

che sto dopo un controllo :) –

+0

Grazie per la downvote . Data l'età della domanda e la mancanza di un commento, supporrò che si tratta di una revival ingiustificata, non correlata alla risposta reale. –

+0

Non ho votato, l'ultima volta che ho downvoted era ottobre –

11

E 'abbastanza facile da rotolare il proprio. Ho creato un controllo utente semplice basato sul pager pila di overflow con due proprietà ...

  1. numero totale di pagine disponibili in base ai dati sottostanti
  2. Numero di maglie per mostrare

selezionato la pagina 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 di 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 formula semplice per determinare l'intervallo di numeri di pagina per 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 link poi viene generata utilizzando qualcosa di simile (dove min e max specificano la gamma di collegamenti della pagina per 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 'precedente' pulsanti (e 'Avanti') ...

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

I primi e gli ultimi pulsanti sono dritto in avanti ...

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

Nel determinare quando visualizzare il "...", mostrano un controllo letterale quando la gamma link non è vicino al primo o ultime pagine ...

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

fare lo stesso per sopra per "max < PageCount".

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

+0

Ho notato che anche [Indietro] 1..2 3 4 5 ... 213 [Avanti] –

+0

Nota: questo esempio produce collegamenti di pagina che sono 0 basato, cioè p = 0 per la prima pagina. L'esempio può essere modificato se il collegamento della prima pagina deve essere 1. Spero che abbia senso e questo aiuti! – Tom

0

Si può provare NPager. Utilizza la stringa di query per gli indici di pagina, senza postback. Ha bisogno Bootstrap per lo styling, ma si può avere le proprie classi CSS personalizzato per il controllo usando 'impaginazione' CSS class.Here è un lavoro DEMO

enter image description here

+0

Penso che dovresti avere un disclaimer per dire che questo è il tuo progetto. –

+1

Si scusa dovrei avere. –