ASP.NET中的真假分页
假分页说的是先从数据库中把所有的数据取出来,然后再分页显示给用户。
1、假分页前台界面。
2、将allowpaging属性设置为true,即允许分页;设置pagesize,即每页显示多少条数据。
3、运行界面:
再说真分页,过程如下:
1、从网站获取aspnetpager.dll。
2、添加该到工具箱,详见我的博客《添加web控件》。
3、添加控件到前台页面。
4、后台代码:
[csharp]
protected void page_load(object sender, eventargs e)
{
page.recordcount = 100;
}
/// <summary>
/// 当改变页数时执行的事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void asp_pagechanged(object sender, eventargs e)
{
response.write("开始与第" + asppage.startrecordindex + "<br>" + "结束于" + asppage.endrecordindex);//开始和结束数据行
binddata();//绑定datagrid数据
}
/// <summary>
/// 绑定数据
/// </summary>
private void binddata()
{ //绑定datagrid数据
dgpage.datasource = dt();
dgpage.databind();
}
/// <summary>
/// 根据当前页数产生数据集
/// </summary>
/// <returns></returns>
private datatable dt()
{
int pagestart = asppage.startrecordindex;//获取当前起始数据行
int pageend = asppage.endrecordindex;//获取当前末尾数据行
sqlconnection conn = new sqlconnection("server=.;database=beidaqingniao;uid=sa;pwd=123456;");//建立数据库连接
string sqltxt = "select * from page where id between @start and @end";//定义sql语句
sqlcommand sqlcmd = new sqlcommand (sqltxt, conn);//建立数据库命令
sqlparameter[] paras = new sqlparameter[] { new sqlparameter ("@start",pagestart ),new sqlparameter ("@end",pageend )};//定义参数数组
sqlcmd.parameters.addrange(paras);//添加参数到命令
dataset ds = new dataset();//定义dataset
sqldataadapter da = new sqldataadapter(sqlcmd);//新建数据适配器
try
{
conn.open();//打开连接
da.fill(ds);//填充ds数据
return ds.tables[0];//返回数据集
}
catch (exception)
{
throw new exception("从数据库获取数据失败!");//出现错误提示“"从数据库获取数据失败!"”
}
finally
{
conn.close();//关闭连接
sqlcmd.dispose();//销掉命令
}
}
5、运行界面:
为了调用方便,可以写成存储过程:
[sql]
-- =============================================
-- description: 分页,用到了row_number()
-- =============================================
create procedure [dbo].[proc_showpage]
@tblname varchar(255), -- 表名
@strgetfields varchar(1000) = '*', -- 需要返回的列,默认*
@strorder varchar(255)='', -- 排序的字段名,必填
@strordertype varchar(10)='asc', -- 排序的方式,默认asc
@pagesize int = 10, -- 页尺寸,默认10
@pageindex int = 1, -- 页码,默认1
@strwhere varchar(1500) = '' -- 查询条件 (注意: 不要加 where)
as
declare @strsql varchar(5000)
if @strwhere !=''
set @strwhere=' where '+@strwhere
set @strsql=
'select * from ('+
'select row_number() over (order by '+@strorder+' '+@strordertype+') as pos,'+@strgetfields+' '+
'from '+@tblname+' '+@strwhere+
') as sp where pos between '+str((@pageindex-1)*@pagesize+1)+' and '+str(@pageindex*@pagesize)
exec (@strsql)
真假分页比较。假分页的优势在于代码简单,如果设置好属性甚至不用编写方法即可实现,适合于较少的数据行(几百);真分页的优势在于无论多少数据,取出一页的时间基本相同,适用于数据庞大的情况(例如百度搜索结果)。
作者 lidaasky
下一篇: java实现字符串数字部分自增
推荐阅读
-
浅析Asp.net MVC 中Ajax的使用
-
ASP.net中Core自定义View查找位置的实例代码
-
浅谈如何在ASP.NET Core中实现一个基础的身份认证
-
在ASP.NET Core中实现一个Token base的身份认证实例
-
Asp.Net MVC中配置Serilog的方法
-
ASP.NET Core SignalR中的流式传输深入讲解
-
ASP.NET 4.0配置文件中的ClientIDMode属性详解
-
ASP.NET Core 3.0 : 二十八. 在Docker中的部署以及docker-compose的使用
-
ASP.NET中GridView 重复表格列合并的实现方法
-
ASP.NET Core应用中与第三方IoC/DI框架的整合