效果:
共1页 首页 上一页 1 2 3 4 5 6 7 8 9 10 ....下一页 末页
调用页面(Aspx):
1.在要显示分页导航的地方加个DIV标签:
<div id="PageInfo" runat="server" class="Blue_Font12"></div>
DataList1.DataSource = ds.Tables[0].DefaultView;
DataList1.DataBind();
this.PageInfo.InnerHtml = PageNums.GetPageNum(ds,DataList1,12); //传入DataSet,DataList名称和分页大小
DataList1.DataBind();
this.PageInfo.InnerHtml = PageNums.GetPageNum(ds,DataList1,12); //传入DataSet,DataList名称和分页大小
3.PageNums实现分页类(PageNums.cs):
(c#)
代码
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
/// <summary>
///PageNums 的摘要说明
/// </summary>
public class PageNums
{
/// </summary>
/// <param name="ds">DataSet实例</param>
/// <param name="datalistname">DataList名称</param>
/// <param name="pagesize">分页大小</param>
public static string GetPageNum(DataSet ds, DataList datalistname, int pagesize)
{
PagedDataSource objPds = new PagedDataSource();
objPds.DataSource = ds.Tables[0].DefaultView;
objPds.AllowPaging = true;
int total = ds.Tables[0].Rows.Count;
objPds.PageSize = pagesize;
int page;
if (HttpContext.Current.Request.QueryString["page"] != null)
page = Convert.ToInt32(HttpContext.Current.Request.QueryString["page"]);
else
page = 1;
objPds.CurrentPageIndex = page - 1;
datalistname.DataSource = objPds;
datalistname.DataBind();
int allpage = 0;
int next = 0;
int pre = 0;
int startcount = 0;
int endcount = 0;
string pagestr = "";
if (page < 1) { page = 1; }
//计算总页数
if (pagesize != 0)
{
allpage = (total / pagesize);
allpage = ((total % pagesize) != 0 ? allpage + 1 : allpage);
allpage = (allpage == 0 ? 1 : allpage);
}
next = page + 1;
pre = page - 1;
startcount = (page + 5) > allpage ? allpage - 9 : page - 4;//中间页起始序号
//中间页终止序号
endcount = page < 5 ? 10 : page + 5;
if (startcount < 1) { startcount = 1; } //为了避免输出的时候产生负数,设置如果小于1就从序号1开始
if (allpage < endcount) { endcount = allpage; } //页码+5的可能性就会产生最终输出序号大于总页码,那么就要将其控制在页码数之内
pagestr = "共" + allpage + "页 ";
pagestr += page > 1 ? "<a href=\"" + HttpContext.Current.Request.CurrentExecutionFilePath + "?page=1\">首页</a> <a href=\"" + HttpContext.Current.Request.CurrentExecutionFilePath + "?page=" + pre + "\">上一页</a>" : "首页 上一页";
//中间页处理,这个增加时间复杂度,减小空间复杂度
for (int i = startcount; i <= endcount; i++)
{
pagestr += page == i ? " <font color=\"#ff0000\">" + i + "</font>" : " <a href=\"" + HttpContext.Current.Request.CurrentExecutionFilePath + "?page=" + i + "\">" + i + "</a>";
}
pagestr += page != allpage ? " <a href=\"" + HttpContext.Current.Request.CurrentExecutionFilePath + "?page=" + next + "\">下一页</a> <a href=\"" + HttpContext.Current.Request.CurrentExecutionFilePath + "?page=" + allpage + "\">末页</a>" : " 下一页 末页";
return pagestr;
}
}
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
/// <summary>
///PageNums 的摘要说明
/// </summary>
public class PageNums
{
/// </summary>
/// <param name="ds">DataSet实例</param>
/// <param name="datalistname">DataList名称</param>
/// <param name="pagesize">分页大小</param>
public static string GetPageNum(DataSet ds, DataList datalistname, int pagesize)
{
PagedDataSource objPds = new PagedDataSource();
objPds.DataSource = ds.Tables[0].DefaultView;
objPds.AllowPaging = true;
int total = ds.Tables[0].Rows.Count;
objPds.PageSize = pagesize;
int page;
if (HttpContext.Current.Request.QueryString["page"] != null)
page = Convert.ToInt32(HttpContext.Current.Request.QueryString["page"]);
else
page = 1;
objPds.CurrentPageIndex = page - 1;
datalistname.DataSource = objPds;
datalistname.DataBind();
int allpage = 0;
int next = 0;
int pre = 0;
int startcount = 0;
int endcount = 0;
string pagestr = "";
if (page < 1) { page = 1; }
//计算总页数
if (pagesize != 0)
{
allpage = (total / pagesize);
allpage = ((total % pagesize) != 0 ? allpage + 1 : allpage);
allpage = (allpage == 0 ? 1 : allpage);
}
next = page + 1;
pre = page - 1;
startcount = (page + 5) > allpage ? allpage - 9 : page - 4;//中间页起始序号
//中间页终止序号
endcount = page < 5 ? 10 : page + 5;
if (startcount < 1) { startcount = 1; } //为了避免输出的时候产生负数,设置如果小于1就从序号1开始
if (allpage < endcount) { endcount = allpage; } //页码+5的可能性就会产生最终输出序号大于总页码,那么就要将其控制在页码数之内
pagestr = "共" + allpage + "页 ";
pagestr += page > 1 ? "<a href=\"" + HttpContext.Current.Request.CurrentExecutionFilePath + "?page=1\">首页</a> <a href=\"" + HttpContext.Current.Request.CurrentExecutionFilePath + "?page=" + pre + "\">上一页</a>" : "首页 上一页";
//中间页处理,这个增加时间复杂度,减小空间复杂度
for (int i = startcount; i <= endcount; i++)
{
pagestr += page == i ? " <font color=\"#ff0000\">" + i + "</font>" : " <a href=\"" + HttpContext.Current.Request.CurrentExecutionFilePath + "?page=" + i + "\">" + i + "</a>";
}
pagestr += page != allpage ? " <a href=\"" + HttpContext.Current.Request.CurrentExecutionFilePath + "?page=" + next + "\">下一页</a> <a href=\"" + HttpContext.Current.Request.CurrentExecutionFilePath + "?page=" + allpage + "\">末页</a>" : " 下一页 末页";
return pagestr;
}
}
(VB)
代码
Imports System
Imports System.Data
Imports System.Configuration
Imports System.Web
Imports System.Web.Security
Imports System.Web.UI
Imports System.Web.UI.HtmlControls
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts
Imports Microsoft.VisualBasic
Public Class PageNums
''' </summary>
''' <param name="ds">DataSet实例</param>
''' <param name="datalistname">DataList名称</param>
''' <param name="pagesize">分页大小</param>
Public Shared Function GetPageNum(ByVal ds As DataSet, ByVal datalistname As DataList, ByVal pagesize As Integer) As String
Dim objPds As New PagedDataSource()
objPds.DataSource = ds.Tables(0).DefaultView
objPds.AllowPaging = True
Dim total As Integer = ds.Tables(0).Rows.Count
objPds.PageSize = pagesize
Dim page As Integer
If HttpContext.Current.Request.QueryString("page") IsNot Nothing Then
page = Convert.ToInt32(HttpContext.Current.Request.QueryString("page"))
Else
page = 1
End If
objPds.CurrentPageIndex = page - 1
datalistname.DataSource = objPds
datalistname.DataBind()
Dim allpage As Integer = 0
Dim [next] As Integer = 0
Dim pre As Integer = 0
Dim startcount As Integer = 0
Dim endcount As Integer = 0
Dim pagestr As String = ""
If page < 1 Then
page = 1
End If
'计算总页数
If pagesize <> 0 Then
allpage = (total / pagesize)
If (total Mod pagesize) <> 0 Then
allpage = allpage + 1
Else
allpage = allpage
End If
If allpage = 0 Then
allpage = 1
Else
allpage = allpage
End If
End If
[next] = page + 1
pre = page - 1
If (page + 5) > allpage Then
startcount = allpage - 9
Else
startcount = page - 4
End If
'中间页起始序号
'中间页终止序号
If page < 5 Then
endcount = 10
Else
endcount = page + 5
End If
If startcount < 1 Then
startcount = 1
End If
'为了避免输出的时候产生负数,设置如果小于1就从序号1开始
If allpage < endcount Then
endcount = allpage
End If
'页码+5的可能性就会产生最终输出序号大于总页码,那么就要将其控制在页码数之内
pagestr = "共" & allpage & "页 "
If page > 1 Then
pagestr += "<a href=""" & HttpContext.Current.Request.CurrentExecutionFilePath & "?page=1"">首页</a> <a href=""" & HttpContext.Current.Request.CurrentExecutionFilePath & "?page=" & pre & """>上一页</a>"
Else
pagestr += "首页 上一页"
End If
'中间页处理,这个增加时间复杂度,减小空间复杂度
For i As Integer = startcount To endcount
If page = i Then
pagestr += " <font color=""#ff0000"">" & i & "</font>"
Else
pagestr += " <a href=""" & HttpContext.Current.Request.CurrentExecutionFilePath & "?page=" & i & """>" & i & "</a>"
End If
Next
If page <> allpage Then
pagestr += " <a href=""" & HttpContext.Current.Request.CurrentExecutionFilePath & "?page=" & [next] & """>下一页</a> <a href=""" & HttpContext.Current.Request.CurrentExecutionFilePath & "?page=" & allpage & """>末页</a>"
Else
pagestr += " 下一页 末页"
End If
Return pagestr
End Function
End Class
Imports System.Data
Imports System.Configuration
Imports System.Web
Imports System.Web.Security
Imports System.Web.UI
Imports System.Web.UI.HtmlControls
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts
Imports Microsoft.VisualBasic
Public Class PageNums
''' </summary>
''' <param name="ds">DataSet实例</param>
''' <param name="datalistname">DataList名称</param>
''' <param name="pagesize">分页大小</param>
Public Shared Function GetPageNum(ByVal ds As DataSet, ByVal datalistname As DataList, ByVal pagesize As Integer) As String
Dim objPds As New PagedDataSource()
objPds.DataSource = ds.Tables(0).DefaultView
objPds.AllowPaging = True
Dim total As Integer = ds.Tables(0).Rows.Count
objPds.PageSize = pagesize
Dim page As Integer
If HttpContext.Current.Request.QueryString("page") IsNot Nothing Then
page = Convert.ToInt32(HttpContext.Current.Request.QueryString("page"))
Else
page = 1
End If
objPds.CurrentPageIndex = page - 1
datalistname.DataSource = objPds
datalistname.DataBind()
Dim allpage As Integer = 0
Dim [next] As Integer = 0
Dim pre As Integer = 0
Dim startcount As Integer = 0
Dim endcount As Integer = 0
Dim pagestr As String = ""
If page < 1 Then
page = 1
End If
'计算总页数
If pagesize <> 0 Then
allpage = (total / pagesize)
If (total Mod pagesize) <> 0 Then
allpage = allpage + 1
Else
allpage = allpage
End If
If allpage = 0 Then
allpage = 1
Else
allpage = allpage
End If
End If
[next] = page + 1
pre = page - 1
If (page + 5) > allpage Then
startcount = allpage - 9
Else
startcount = page - 4
End If
'中间页起始序号
'中间页终止序号
If page < 5 Then
endcount = 10
Else
endcount = page + 5
End If
If startcount < 1 Then
startcount = 1
End If
'为了避免输出的时候产生负数,设置如果小于1就从序号1开始
If allpage < endcount Then
endcount = allpage
End If
'页码+5的可能性就会产生最终输出序号大于总页码,那么就要将其控制在页码数之内
pagestr = "共" & allpage & "页 "
If page > 1 Then
pagestr += "<a href=""" & HttpContext.Current.Request.CurrentExecutionFilePath & "?page=1"">首页</a> <a href=""" & HttpContext.Current.Request.CurrentExecutionFilePath & "?page=" & pre & """>上一页</a>"
Else
pagestr += "首页 上一页"
End If
'中间页处理,这个增加时间复杂度,减小空间复杂度
For i As Integer = startcount To endcount
If page = i Then
pagestr += " <font color=""#ff0000"">" & i & "</font>"
Else
pagestr += " <a href=""" & HttpContext.Current.Request.CurrentExecutionFilePath & "?page=" & i & """>" & i & "</a>"
End If
Next
If page <> allpage Then
pagestr += " <a href=""" & HttpContext.Current.Request.CurrentExecutionFilePath & "?page=" & [next] & """>下一页</a> <a href=""" & HttpContext.Current.Request.CurrentExecutionFilePath & "?page=" & allpage & """>末页</a>"
Else
pagestr += " 下一页 末页"
End If
Return pagestr
End Function
End Class