电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

简单实用的分页类


发布日期:2021/6/6
 
写一个分页类

using System;

using SystemText;

using SystemDiagnostics;

namespace Zhuwenfeng

{

public class MyPager

{

/// <summary>

/// 总数据条数

/// </summary>

public int TotalCount { get; set; }

/// <summary>

/// 每页数据条数

/// </summary>

public int PageSize { get; set; }

/// <summary>

/// 当前页码(从开始)

/// </summary>

public int CurrentPageIndex { get; set; }

/// <summary>

/// 显示出来最多的页码数量因为假设有不可能把页都显示到界面上

/// </summary>

public int MaxPagerCount { get; set; }

/// <summary>

/// 页码链接的地址格式页码用{n}占位

/// </summary>

public string UrlFormat { get; set; }

public MyPager()

{

PageSize = ;

MaxPagerCount = ;

}

/// <summary>

/// 尝试从字符串pn中解析当前页面赋值给CurrentPageIndex

/// </summary>

/// <param name=pn></param>

public void TryParseCurrentPageIndex(string pn)

{

int temp;

if (intTryParse(pn out temp))

{

CurrentPageIndex = temp;

}

else

{

CurrentPageIndex = ;

}

}

/// <summary>

/// 创建页码链接

/// </summary>

/// <param name=i>页码</param>

/// <param name=text>链接文本</param>

/// <returns></returns>

private string GetPageLink(int istring text)

{

StringBuilder sb = new StringBuilder()

string url = UrlFormatReplace({n} iToString())

sbAppend(<a )Append(url)Append(>Append(text)Append(</a>

return sbToString()

}

/// <summary>

/// 检查输入参数

/// </summary>

private void Check()

{

DebugAssert(PageSize>

DebugAssert(CurrentPageIndex >=

DebugAssert(!stringIsNullOrEmpty(UrlFormat))

}

/// <summary>

///渲染到前台到得HTML代码

/// </summary>

/// <returns></returns>

public string Render()

{

Check()

StringBuilder sb = new StringBuilder()

double tempCount = TotalCount / PageSize;

int pageCount = (int)MathCeiling(tempCount)

//计算显示的页码数(当总页码大于MaxPagerCount)的起始页码

int visibleStart = CurrentPageIndexMaxPagerCount/;

if (visibleStart <

{

visibleStart = ;

}

//计算显示的页码数(当总页码大于MaxPagerCount)的起始页码

int visibleEnd = visibleStart + MaxPagerCount;

//显示最多MaxPagerCount条

//如果算出来的结束页码大于总页码的话则调整为最大页码

if (visibleEnd >pageCount)

{

visibleEnd = pageCount;

}

if (CurrentPageIndex >

{

sbAppend(GetPageLink( 首页))

sbAppend(GetPageLink(CurrentPageIndex 上一页))

}

else

{

sbAppend(<span>首页</span>

//如果没有上一页了则只显示一个上一页的文字没有超链接

sbAppend(<span>上一页</span>

}

//绘制可视的页码链接

for (int i = visibleStart; i <= visibleEnd; i++)

{

//当前页不是超链接

if (i == CurrentPageIndex)

{

sbAppend(<span>Append(i)Append(</span>

}

else

{

sbAppend(GetPageLink(iiToString()))

}

}

if (CurrentPageIndex < pageCount)

{

sbAppend(GetPageLink(CurrentPageIndex + 下一页))

sbAppend(GetPageLink(pageCount + 末页))

}

else

{

sbAppend(<span>下一页</span>

sbAppend(<span>末页</span>

}

return sbToString()

}

}

}

UI层代码示例

public partial class 分页测试 : SystemWebUIPage

{

protected string PagerHTML { get; private set; }

protected void Page_Load(object sender EventArgs e)

{

var pager = new MyPager()

pagerUrlFormat = 分页测试aspx?pagenum={n};

pagerPageSize = ;

pagerTryParseCurrentPageIndex(Request[pagenum])

int startRowIndex = (pagerCurrentPageIndex ) * pagerPageSize;

so_KeywordLogBLL bll = new so_KeywordLogBLL()

pagerTotalCount = bllGetTotalCount()

RepeaterDataSource = bllGetPagedData(startRowIndex startRowIndex + pagerPageSize

RepeaterDataBind()

PagerHTML = pagerRender()//渲染页码条HTML

}

}

前台代码

<form id=form runat=server>

<div>

<asp:Repeater ID=Repeater runat=server>

<ItemTemplate>

<li>

<%#Eval(Id) %>|<%#Eval(KeyWord) %>

</li>

</ItemTemplate>

</asp:Repeater>

<div class=pager>

<%=PagerHTML%>

</div>

</div>

</form>

加一个CSS更好看

<style type=text/css>

pager

{

textalign: center;

paddingbottom: px;

paddingleft: px;

paddingright: px;

float: right;

paddingtop: px;

}

pager a

{

borderbottom: #ccc px solid;

textalign: left;

borderleft: #ccc px solid;

paddingbottom: px;

lineheight: px;

margin: px px;

outlinestyle: none;

paddingleft: px;

paddingright: px;

background: #fff;

color: #;

fontsize: px;

bordertop: #ccc px solid;

borderright: #ccc px solid;

textdecoration: none;

paddingtop: px;

}

pager a:hover

{

borderbottom: #f px solid;

borderleft: #f px solid;

color: #f;

bordertop: #f px solid;

borderright: #f px solid;

textdecoration: underline;

}

pager a:focus

{

mozoutlinestyle: none;

}

pager span

{

borderbottomstyle: none;

textalign: left;

paddingbottom: px;

lineheight: px;

borderrightstyle: none;

margin: px px;

paddingleft: px;

paddingright: px;

bordertopstyle: none;

background: #f;

color: #fff;

fontsize: px;

borderleftstyle: none;

paddingtop: px;

}

</style>

再加一个数据访问层的Select代码

public int GetTotalCount()

{

string sql = SELECT count(*) FROM so_KeywordLog;

return (int)DbHelperSQLGetSingle(sql)

}

public DataSet GetPagedData(int minrownum int maxrownum)

{

string sql = SELECT * from(SELECT *(row_number() over(order by Id)) rownum FROM so_KeywordLog) t where rownum>=@minrownum and rownum<=@maxrownum;

SqlParameter[] parameters = { new SqlParameter(@minrownum SqlDbTypeInt new SqlParameter(@maxrownum SqlDbTypeInt ) };

parameters[]Value = minrownum;

parameters[]Value = maxrownum;

return DbHelperSQLQuery(sql parameters)

}

相关分页Select语句(扩展)

存储过程

create PROCEDURE GetPageDataOutRowPageCount

@PageIndex int = 当前页数

@PageSize int = 每页大小

@RowCount int output总行数(传出参数)

@PageCount int output总页数(传出参数)

AS

begin

DECLARE @sql NVARCHAR(@sqlCount NVARCHAR(

select @RowCount =COUNT(SID)@PageCount=CEILING((COUNT(SID)+)/@PageSize) FROM Students

SET @sql=SELECT TOP +str(@PageSize) + FROM Students where SID not in(select top +str((@PageIndex)*@PageSize) + SID from Students)

EXEC(@sql)

end

Select语句

select top + pageSize + * from Students where SID not in (select top + (pageIndex ) * intParse(pageSize) + SID from Students)

Select语句

select * from (select * Row_Number()over(order by id) RowNumber from books) t

where tRowNumber>= and tRowNumber<=

第n页 (PageIndex)*pageSize+PageIndex*pageSize

ListView 提供的分页不说了

上一篇:iframe并且控制不出现横向的滚动条的方法

下一篇:动态设置页面的部分Head