C# C语言中的动态分页

C# C语言中的动态分页,c#,loops,for-loop,pagination,paging,C#,Loops,For Loop,Pagination,Paging,我是新来的 我的问题和马库斯的一样 我尝试执行的分页应该如下所示: 123456。。。101 当我点击数字5时,我希望它显示如下数字: 1。。。3 4 5 6 7 ... 101 当我在最后几页时,我希望它看起来与第一页相似: 1。。。96979899100101 粗体数字是您当前正在查看的页面 我希望这些点仅在有超过7页可用时才出现,如果没有,它应该看起来像一个正常的分页: 1234567 我没有加粗,而是添加了一些CSS 我的原始代码是这样的 if (ListCount > ListP

我是新来的

我的问题和马库斯的一样

我尝试执行的分页应该如下所示:

123456。。。101

当我点击数字5时,我希望它显示如下数字:

1。。。3 4 5 6 7 ... 101

当我在最后几页时,我希望它看起来与第一页相似:

1。。。96979899100101

粗体数字是您当前正在查看的页面

我希望这些点仅在有超过7页可用时才出现,如果没有,它应该看起来像一个正常的分页:

1234567

我没有加粗,而是添加了一些CSS

我的原始代码是这样的

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>&nbsp;";
                html += "</li> &nbsp;";
            }
            html += "</ul>";
        }
此代码显示所有页面,而不是对其进行分组。。 我修改了上面的代码,但它只显示第一页和最后一页, 比如如果我有10页,它只显示第1页和第10页,而不是第13页。。。十,

任何帮助都将不胜感激

谢谢

约翰

求解算法

        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>&nbsp;";
        #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>&nbsp;";
        #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 += "";
}
}

只需要使用大于或小于

好的,逻辑是什么

"

"

希望我的逻辑能帮助其他需要使用For循环分页的用户


约翰

试试这样的。您需要根据需要进行定制

    /// <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>&nbsp;");
    sbPagingHtml.Append("</li> &nbsp;");
    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>&nbsp;");
          sbPagingHtml.Append("</li> &nbsp;");
        }
      }

      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>&nbsp;");
      sbPagingHtml.Append("</li> &nbsp;");
    }

    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>&nbsp;");
      sbPagingHtml.Append("</li> &nbsp;");
    }

    return sbPagingHtml.ToString();
  }

有大量的开源分页库。你可以考虑下载其中一个来查看它们是如何运行的。代码看起来很好,但是当你有很多页面要查看的时候。它将显示所有页面,如1-50它将显示所有1-50。。。我想要这样的东西,它会将数字与。。。分组的算法。。。有什么想法吗?就像1。。。3 4 5 6 7 ... 我更新了答案。这是一个工作样本,您可能需要根据需要进行定制。
    /// <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>&nbsp;");
    sbPagingHtml.Append("</li> &nbsp;");
    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>&nbsp;");
          sbPagingHtml.Append("</li> &nbsp;");
        }
      }

      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>&nbsp;");
      sbPagingHtml.Append("</li> &nbsp;");
    }

    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>&nbsp;");
      sbPagingHtml.Append("</li> &nbsp;");
    }

    return sbPagingHtml.ToString();
  }