ASP.NET 数字索引分页
时间:2010-09-08 来源:Simcoder
效果:
共1页 首页 上一页 1 2 3 4 5 6 7 8 9 10 ....下一页 末页
调用页面(Aspx):
1.在要显示分页导航的地方加个DIV标签:
2.调用页的代码(CS): DataList1.DataSource = ds.Tables[0].DefaultView;
DataList1.DataBind();
this.PageInfo.InnerHtml = PageNums.GetPageNum(ds,DataList1,12); //传入DataSet,DataList名称和分页大小
3.PageNums实现分页类(PageNums.cs):
(c#)

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.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
相关阅读 更多 +