Controllo paging ASP.NET [chiuso]
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.
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
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à ...
- Numero totale di pagine disponibili in base ai dati sottostanti
- 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 = "…";
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