ASP.NET中的真假分页
当数据库中的数据较多的时,以往的DataGrid往往显得无力,这时就轮到分页大显身手,分页是指将数据库中的数据分成若干个页面,独立显示出来。我们往往把分页分为两种:真分页和假分页。假分页说的是先从数据库中把所有的数据取出来,然后再分页显示给用户。
1、假分页前台界面。
2、将AllowPaging属性设置为True,即允许分页;设置PageSize,即每页显示多少条数据。
3、运行界面:
再说真分页,过程如下:
1、从网站获取AspNetPager.dll。
2、添加该组件到工具箱,详见我的博客《添加web控件》。
3、添加控件到前台页面。
4、后台代码:
[csharp]
protected void Page_Load(object sender, EventArgs e)
{
aspPage.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
补充:Web开发 , ASP.Net ,