在网上也看了不少的关于分页的文章,大多可以归纳为一下几类,第一:纯存储过程分页,大多语句非常繁琐,维护起来也很麻烦;第二:用.net的PagedDataSource分页,这中分页操作起来比较简单,但是只适合小数据量,一旦数据量上了十万,百万的这种分页方式已经不在适合;第三:用Viewdata传参进行分页,这种分页方式看上去效率还是可以,但是稳定太差。当然还有其他的分页方式,我在这里就不在一一列举,下面我就谈谈自己的分页方式。
闲来无事,来研究研究.net的分页技术。
在网上也看了不少的关于分页的文章,大多可以归纳为一下几类,第一:纯存储过程分页,大多语句非常繁琐,维护起来也很麻烦;第二:用.net的PagedDataSource分页,这中分页操作起来比较简单,但是只适合小数据量,一旦数据量上了十万,百万的这种分页方式已经不在适合;第三:用Viewdata传参进行分页,这种分页方式看上去效率还是可以,但是稳定太差。当然还有其他的分页方式,我在这里就不在一一列举,下面我就谈谈自己的分页方式。
首先让我们先来了解一下AspNetPager是个什么东东,可能会有N多人已经认识了并且用过了这个控件,但是这里我还是希望你能耐心的继续听下去,AspNetPager针对ASP.NET分页控件的不足,提出了与众不同的解决asp.net中分页问题的方案,即将分页导航功能与数据显示功能完全独立开来,由用户自己控制数据的获取及显示方式,因此可以被灵活地应用于任何需要实现分页导航功能的地方,如为GridView、DataList以及Repeater等数据绑定控件实现分页、呈现自定义的分页数据以及制作图片浏览程序等,因为AspNetPager控件和数据是独立的,因此要分页的数据可以来自任何数据源,如SQL Server、Oracle、Access、mysql、DB2等数据库以及XML文件、内存数据或缓存中的数据、文件系统等等,下面我将用我的实例来为你讲解AspNetPager结合sqlserver2005实现的分页过程。
首先要在项目里面引用一下AspNetPager.dll(没有的可以到这里下载http://www.webdiyer.com ),下面是我的aspx页面代码:

Code
<webdiyer:AspNetPager ID="AspNetPager1" runat="server" Width="100%" UrlPaging="true" ShowPageIndexBox="Always" PageIndexBoxType="DropDownList" TextBeforePageIndexBox="Go To Page: " HorizontalAlign="right" PageSize="12" OnPageChanged="AspNetPager1_PageChanged" EnableTheming="true">
</webdiyer:AspNetPager>
<asp:Repeater ID="Repeater1" runat="server">
<HeaderTemplate>
<table width="100%" border="1" cellspacing="0" cellpadding="4" style="border-collapse:collapse">
<tr style="backGround-color:#CCCCFF"><th style="width:15%">IP编号</th><th style="width:15%">IP开始段</th><th style="width:30%">IP结束段</th><th style="width:20%">归属地</th><th style="width:20%">操作</th></tr>
</HeaderTemplate>
<ItemTemplate>
<tr style="background-color:#FAF3DC">
<td><%# Eval("IPid")%></td>
<td><%# Eval("IPFrom")%></td>
<td><%# Eval("IPTo")%></td>
<td><%# Eval("IPLocation")%></td>
<td></td>
</tr>
</ItemTemplate>
<AlternatingItemTemplate>
<tr style="background-color:#eaeaea">
<td><%# Eval("IPid")%></td>
<td><%# Eval("IPFrom")%></td>
<td><%# Eval("IPTo")%></td>
<td><%# Eval("IPLocation")%></td>
<td></td>
</tr>
</AlternatingItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
<webdiyer:AspNetPager ID="AspNetPager2" runat="server" CloneFrom="AspNetPager1">
</webdiyer:AspNetPager>
注意引用AspNetPager.dll,要在你的分页页面上添加<%@ Register Assembly="AspNetPager" Namespace="Wuqi.Webdiyer" TagPrefix="webdiyer" %>,这里我要对我的IPInfo表进行分页,数据有40W条,应该不算小吧,那么接着看我们应该写一个分页存储过程,这里的存储过程是使用微软在MS SQL2005才加上去的ROW_NUMBER函数来写,这将会大大减少存储过程代码。

Code
Create PROCEDURE [dbo].[P_GetPagedOrders2005]
(@startIndex INT,
@endindex INT
)
AS
select * from (SELECT ROW_NUMBER() OVER(ORDER BY IPid DESC) AS rownum,
[IPid],[IPFrom],[IPTo],[IPLocation],[IPCity],[IPToNumber],[IPFromNumber] from IPInfo) as U
WHERE rownum between @startIndex and @endIndex
GO
这个存储过程需要连个参数@startIndex,@endindex,大家可以看到这个存储过程有多短,而且多么易读。下面我们来看看后台的代码:

Code
public partial class PagedRepeater_Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
int totalOrders = (int)SqlHelper.ExecuteScalar(CommandType.StoredProcedure, "P_GetOrderNumber");
AspNetPager1.RecordCount = totalOrders;
bindData();
}
}
void bindData()
{
Repeater1.DataSource = SqlHelper.ExecuteReader(CommandType.StoredProcedure, ConfigurationManager.AppSettings["pagedSPName"],
new SqlParameter("@startIndex", AspNetPager1.StartRecordIndex),
new SqlParameter("@endIndex", AspNetPager1.EndRecordIndex));
Repeater1.DataBind();
}
protected void AspNetPager1_PageChanged(object src, EventArgs e)
{
bindData();
}
}
看到这里相信你已经彻底的知道了AspNetPager分页的用法,当然还有就是再看看使用AspNetPager分页的外观是什么这样的,当然外观是可以选择的,你甚至在理解了AspNetPager的工作原理之后(可以自己去反编译AspNetPager.dll文件)可以自己对其中的方法进行更改,家点自己风格进去未尝不可。

这就是当前的效果图,查询速度也是非常的快,有兴趣的朋友可以尝试一下.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述