效果:
共1页 首页 上一页 1 2 3 4 5 6 7 8 9 10 ....下一页 末页
调用页面(Aspx):
1.在要显示分页导航的地方加个DIV标签:
<
div
id
="PageInfo"
runat
="server"
class
="Blue_Font12"
></
div
>
2.调用页的代码(CS):
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