当前位置:编程学习 > asp >>

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 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,