Paginación dinámica en C#
loops for-loop (1)
soy nuevo aqui
Tengo el mismo problema que Marcus aquí
la paginación que trato de hacer debería verse más o menos así:
1 2 3 4 5 6 ... 101
Cuando hago clic en el número 5 me gustaría que muestre los números así:
1 ... 3 4 5 6 7 ... 101
cuando estoy en las últimas páginas quiero que se vea similar al primero:
1 ... 96 97 98 99 100 101
El número en negrita es la página que estás viendo actualmente.
Quiero que los puntos aparezcan solo cuando hay más de 7 páginas disponibles, de lo contrario, debería verse como una paginación normal:
1 2 3 4 5 6 7
en lugar de hacerlo en negrita, agregué algunos CSS en él ...
mi código original es algo como esto ...
if (ListCount > ListPerPage)
{
if (Currentpage > PageCount)
{
Response.Redirect(Request.Path + "/?p=" + PageCount);
}
html += "<ul class=/"productListPaging/">";
for (int x = 1; x <= PageCount; x++)
{
if (x == Currentpage)
{
html += "<li class=/"active/">";
}
else
{
html += "<li>";
}
html += "<a href=/"javascript:void(0);/" onclick=/"changePage(" + x + ");/">";
html += x;
html += "</a> ";
html += "</li> ";
}
html += "</ul>";
}
este código muestra todas las páginas, no lo agrupa ... Modifiqué el código anterior, pero solo muestra la primera y la última página, Me gusta si tengo 10 páginas, solo muestra la página 1 y 10 y no 1 2 3 ... 10
Cualquier ayuda sería apreciada..
Gracias
Johan
Resuelto el algoritmo
int before = 2;
int after = 2;
for (int x = 1; x <= Pagecount; x++)
{
if (x == CurrentPage)
{
if (x == Pagecount)
{
html += "";
}
else
{
html += "<li class=/"active/">";
#region Page Loop #
html += "<a href=/"" + Url;
html += querypage + x;
if (sortid != "")
{
html += querysort;
}
if (viewtype != "")
{
html += queryviews;
}
if (pricing != 0)
{
html += queryrange;
}
html += "/" >";
html += x;
html += "</a> ";
#endregion
html += "</li>";
}
}
else if (x < CurrentPage - before)
{
if (befli == 0)
{
html += "<li class=/"dotdotdot/">";
html += "<a href=/"#/">...</a>";
html += "</li>";
befli++;
}
}
else if (x > CurrentPage - before && x < CurrentPage + after)
{
if (x == Pagecount)
{
html += "";
}
else
{
html += "<li>";
#region Page Loop #
html += "<a href=/"" + Url;
html += querypage + x;
if (sortid != "")
{
html += querysort;
}
if (viewtype != "")
{
html += queryviews;
}
if (pricing != 0)
{
html += queryrange;
}
html += "/" >";
html += x;
html += "</a> ";
#endregion
html += "</li>";
}
}
else if (x > CurrentPage + after)
{
if (aftli == 0)
{
html += "<li class=/"dotdotdot/">";
html += "<a href=/"#/">...</a>";
html += "</li>";
aftli++;
}
}
else if (x == Pagecount)
{
html += "";
}
}
Solo se necesita calcular el ciclo for usando el mayor o menor que
Ok, la lógica
''
int Before = #How Many Items Before Selected Number
int After = #How Many Items After Selected Number
int PageCount = #How Many Pages
int CurrentPage = #Current Page
//First Page
if (PageCount > 1)
{
// Here For Page Set Static 1
}
//Previous Button
if (CurrentPage != 1)
{
//Code Here (CurrentPage - 1)
}
for loop
for(int x = 1; x < PageCount; x++)
{
if (x == 1)
{
Page 1 //Static Page 1
if (x == CurrentPage)
{
//Bold Font / Highlight
}
else
{
//Normal
}
}
else if ( x == CurrentPage)
{
if(x == PageCount)
{
//None
}
else
{
//Bold Font / Highlight
}
}
else if (x < CurrentPage - Before)
{
// . . .
}
else if (x > CurrentPage - Before && x < CurrentPage + After)
{
if(x == PageCount)
{
//None
}
else
{
//Normal Font
}
}
else if (x > CurrentPage + After)
{
// . . .
}
else if (x == PageCount)
{
if (x == CurrentPage)
{
//Bold Highlight
}
else
{
//Normal
}
}
}
//Next Button
if (CurrentPage != PageCount)
{
//Code Here (CurrentPage + 1)
}
//First Page
if (PageCount > 1)
{
// Here For Page Set Static Last Page
}
''
Hope My Logic ayuda a otros usuarios que necesitan paginación usando bucles for.
Johan
Prueba algo como esto. Necesita personalizarlo según su necesidad.
/// <summary>
/// Builds the paging HTML.
/// </summary>
/// <param name="currentpage">The current selected page.</param>
/// <param name="totalPages">The total pages for paging.</param>
/// <param name="dotsApearanceCount">The dots apearance count. How many dots (.) you want</param>
/// <param name="groupCount">The group count. Group that is build based on selected page</param>
/// <returns></returns>
public string BuildPagingHTML(int currentpage, int totalPages, int dotsApearanceCount, int groupCount)
{
StringBuilder sbPagingHtml = new StringBuilder();
sbPagingHtml.Append("<ul class=/"productListPaging/">");
// Display the first page
sbPagingHtml.Append("<li>");
sbPagingHtml.Append("<a href=/"javascript:void(0);/" onclick=/"changePage(" + 1 + ");/">");
sbPagingHtml.Append(1);
sbPagingHtml.Append("</a> ");
sbPagingHtml.Append("</li> ");
if (totalPages > 1 && currentpage - 2 >= 1)
{
sbPagingHtml.Append(GenerateDots(dotsApearanceCount));
for (var linkCount = currentpage - 2; linkCount <= currentpage + 2; linkCount++)
{
if (linkCount >= 2 && linkCount <= totalPages - 2)
{
if (currentpage == linkCount)
{
sbPagingHtml.Append("<li class=''active''>");
}
else
{
sbPagingHtml.Append("<li>");
}
sbPagingHtml.Append("<a href=/"javascript:void(0);/" onclick=/"changePage(" + linkCount + ");/">");
sbPagingHtml.Append(linkCount);
sbPagingHtml.Append("</a> ");
sbPagingHtml.Append("</li> ");
}
}
sbPagingHtml.Append(GenerateDots(dotsApearanceCount));
// Display the last page
sbPagingHtml.Append("<li>");
sbPagingHtml.Append("<a href=/"javascript:void(0);/" onclick=/"changePage(" + totalPages + ");/">");
sbPagingHtml.Append(totalPages);
sbPagingHtml.Append("</a> ");
sbPagingHtml.Append("</li> ");
}
sbPagingHtml.Append("</ul>");
return sbPagingHtml.ToString();
}
/// <summary>
/// Generates the dots.
/// </summary>
/// <param name="numberofDots">The numberof dots.</param>
/// <returns></returns>
public string GenerateDots(int numberofDots)
{
StringBuilder sbPagingHtml = new StringBuilder();
for (var dotCount = 1; dotCount <= numberofDots; dotCount++)
{
sbPagingHtml.Append("<li>");
sbPagingHtml.Append("<a>");
sbPagingHtml.Append(".");
sbPagingHtml.Append("</a> ");
sbPagingHtml.Append("</li> ");
}
return sbPagingHtml.ToString();
}