当中的数据较多的时,以往的datagrid往往显得无力,这时就轮到分页大显身手,分页是指将数据库中的数据分成若干个页面,独立显示出来。我们往往把分页分为两种:真分页和假分页。
假分页说的是先从数据库中把所有的数据取出来,然后再分页显示给用户。
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