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.

¿Fue útil?

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

cp

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 ...

  1. Número total de páginas disponibles según los datos subyacentes
  2. 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 = "&hellip;";
    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

ingrese la descripción de la imagen aquí

Puede probar NPager . Utiliza una cadena de consulta para los índices de página, sin devoluciones. Necesita Bootstrap para el estilo, sin embargo, puede tener sus propias clases css personalizadas para el control utilizando la clase CSS 'paginación'. Aquí hay una DEMO

 ingrese la descripción de la imagen aquí

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top