Control de paginación ASP.NET [cerrado]
Pregunta
Estoy buscando un control de paginación decente en ASP.NET, muy parecido al localizador Stackoverflow. ¿Alguien puede recomendar uno?
Preferiría uno que tampoco usara Postback, solo una cadena de consulta personalizable.
Solución 2
Esperaba más respuestas, pero parece que muchas personas solo hacen las suyas. He encontrado uno decente que se mantiene con bastante frecuencia en codeproject.com
No es lo mismo que el stackoverflow.com. Sería bueno si hubiera un control decente de código abierto que tuviera una variedad de opciones de salida diferentes.
Otros consejos
Es bastante fácil rodar el tuyo. Creé un control de usuario simple basado en el localizador de desbordamiento de pila con dos propiedades ...
- Número total de páginas disponibles según los datos subyacentes
- Número de enlaces para mostrar
La página seleccionada se determina leyendo la cadena de consulta. El mayor desafío fue alterar la URL con el nuevo número de página. Este método utiliza un parámetro de cadena de consulta 'p' para especificar qué página mostrar ...
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 fórmula simple para determinar el rango de números de página para mostrar ...
int min = Math.Min(Math.Max(0, Selected - (PageLinksToShow / 2)), Math.Max(0, PageCount - PageLinksToShow + 1));
int max = Math.Min(PageCount, min + PageLinksToShow);
Cada enlace se genera usando algo como (donde min y max especifican el rango de enlaces de página para crear) ...
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);
}
También se pueden crear botones 'Anterior' (y 'Siguiente') ...
HyperLink previous = new HyperLink();
previous.Text = "Previous";
previous.NavigateUrl = getLink(Selected - 1);
El primer y el último botón son directos ...
HyperLink previous = new HyperLink();
previous.Text = "1";
first.NavigateUrl = getLink(0);
Al determinar cuándo mostrar " ... " ;, mostrar un control literal cuando el rango del enlace no está al lado de la primera o la última página ...
if (min > 0)
{
Literal spacer = new Literal();
spacer.Text = "…";
this.Controls.Add(spacer);
}
Haga lo mismo para lo anterior para " max < PageCount & Quot ;.
Todo este código se coloca en un método de anulación de CreateChildControls.
He trabajado con los controles de página DevExpress y Telerik y prefiero el localizador DevExpress. No estoy seguro si el localizador DevExpress puede funcionar directamente con una cadena de consulta, pero me sorprendería si no fuera así, ya que es muy flexible. En cuanto a la paginación entre las páginas existentes después de la descarga, todo puede residir en el cliente o, si es necesario un viaje al servidor, el control está totalmente equipado con AJAX. Le sugiero que comience su búsqueda en www.devexpress.com y luego visite también www.Telerik.com (que también está equipado con AJAX).
No es un control, pero esta es la forma de implementar la paginación a nivel de base de datos: Paginación de SQL Server 2005
He escrito un control de buscapersonas llamado: Flexy Pager
Leer más: http: //www.codeproject .com / Articles / 748270 / Flexy-Pager-for-ASP-NET-WebForm-MVC