ASP.NET中的几种分页

简介: ASP.NET中的DataGrid控件自带了分页功能,当绑定了DataGrid的数据源之后,需要对DataGrid控件进行一些设置:

       1、通过DataGrid控件实现分页  


       ASP.NET中的DataGrid控件自带了分页功能,当绑定了DataGrid的数据源之后,需要对DataGrid控件进行一些设置:

6.png


       左击控件右上角的小箭头→属性生成器:

7.png


      选择左边的【分页】选项卡


      选中【允许分页】;【页大小】表示一页显示多少条数据;导航按钮的【位置】有顶、底、上下型三种选择,【模式】有页码和“上一页、下一页按钮”,如果选择了页码模式,【数值按钮】表示最多显示的按钮数量,如果选择了另一种模式,“上一页”、“下一页”可以编辑成其他文本。


      下面就到代码,为DataGrid控件添加并绑定数据源:


       为了方便,先写一个查询数据并绑定到DataGrid的函数BindToGridView():    


private void BindToDataGrid()
    {
        SqlConnection conn = DB.CreateConnection();         //定义数据库连接对象
        conn.Open();                                        //打开数据库连接
        string cmdText = "select * from T_Employee";        //从员工表中查询所有信息
        SqlCommand cmd = new SqlCommand(cmdText, conn);     //定义命令对象
        SqlDataAdapter sda = new SqlDataAdapter(cmd);       //定义适配器对象
        DataTable dt = new DataTable();                     //定义DataTable表dt
        sda.Fill(dt);                                       //填充DataTable表dt
        DataGrid1.DataSource = dt;                          //将DataGrid1的数据源设为为dt
        DataGrid1.DataBind();                               //DataGrid绑定数据源
    }


       此时就会出现分页的效果:

8.png


       但是点击下一页时,并不会跳转到下一页,这时因为点击时所触发的是该控件的PageIndexChanged事件,所以点击后需要重新绑定:

protected void DataGrid1_PageIndexChanged(object source, DataGridPageChangedEventArgs e)
    {
        this.DataGrid1.CurrentPageIndex = e.NewPageIndex;       //跳转到所指定的新的页面
        BindToDataGrid();                                       //重新绑定控件
    }


       2、通过System.Web.UI.WebControls.PagedDataSource实现分页


       PageDataSource类中封装了与分页相关的属性,通过PageDataSource类,可以使得Repeater和DataList进行分页显示,而且Repeater和DataList也比DataGrid显示形式多样化。


       定义一个静态变量curPage、pageSize分别用来表示当前页和页大小:


 private static int curPage=1;     //默认显示第一页
    private static int pageSize=3;    //默认每页显示三条数据


       为了方便,先写一个根据当前页、页大小来分页并绑定数据的函数DataBindToRepeter():


private void DataBindToRepeter()
    {
        SqlConnection conn = DB.CreateConnection();                             //定义数据库连接对象
        conn.Open();                                                            //打开数据库连接
        string cmdText = "select * from People";                                //从员工表中查询所有信息
        SqlCommand cmd = new SqlCommand(cmdText, conn);                         //定义命令对象
        SqlDataAdapter sda = new SqlDataAdapter(cmd);                           //定义适配器对象
        DataTable dt = new DataTable();                                         //定义DataTable表dt
        sda.Fill(dt);                                                           //填充DataTable表dt
        int curPage = int.Parse(this.Label2.Text);
        System.Web.UI.WebControls.PagedDataSource pds = new PagedDataSource();  //实例化PageDataSource类pds
        pds.DataSource = dt.DefaultView;                                        //获取dt的筛选视图
        pds.AllowPaging = true;                                                 //允许分页
        pds.PageSize = 3;                                                       //页大小为3
        pds.CurrentPageIndex = curPage - 1;                                     //当前页码,从零开始
        Repeater1.DataSource = pds;                                             //将PageDataSource的实例ps设置为Repeter控件的数据源
        Repeater1.DataBind();                                                   //绑定数据源
    }


      这里手动添加上一页(btnPre)、下一页(btnNext)两个按钮,每次点击按钮时,根据事件分别让curPage的值减一或加一然后重新绑定:      

protected void btnPre_Click(object sender, EventArgs e)
    {
        curPage=curPage-1;            //向前翻页
        DataBindToRepeter();          // 重新绑定
    }
    protected void btnNext_Click(object sender, EventArgs e)
    {
        curPage=curPage+1;            //向后翻页
        DataBindToRepeter();          // 重新绑定
    }


       PageDataSource分页的原理:PageDataSource相当于先把数据提取出来,再根据页面大小和需要显示的当前页进行分页和显示。由于需要先把所有的数据提取出来,所以当需要显示的数据量较为庞大时,此方法性能不是很合理。


       3、通过存储过程分页


      通过存储过程实现分页,根据条件,只从数据库中提取出要显示的那一页中的数据,那么就涉及到了假如数据库中共有100条数据,如何从数据库中取出第50到第60条数据来。这时想到了牛腩大哥视频里所讲的真假分页以及如何提取表中中间连续的几条数据。


      在程序中定义如下变量pageSize(每个页面显示多少条记录)、curPage(当前在第几页)。通过这些就可以计算出需要显示数据库中的数据是从第几条(beginPos)到第几条(endPos)。


      这几个变量之间的关系为beginPos =(curPage-1)× pageSize+1


                                              endPos    =   curPage   × pageSIze


      存储过程核心代码为:    

CREATE PROCEDURE PRO_Paging
    --从第几条数据开始显示
    @beginPos int,  
    --显示到第几条数据结束
    @endPos int
AS
BEGIN
  SET NOCOUNT ON;
  --这里用一个添加了用来为每条数据排序的rowNumber列的temptb表
    with temptb as(           
    select ROW_NUMBER() over(order by pID) as rowNumber,* from People) 
    --查询第@beginPos条到第@endPos条的数据
    select * from temptb where rowNumber between @beginPos and @endPos 
END
GO


      这种方法的优点在于,指定了要显示的页数和每页的大小之后,只需从数据库中提取要显示的那一页数据即可,不需要将大量数据全部提取出来,也就是牛腩视频中说到的“真分页”,而前面的方法即取出所有数据的分页方法就是“假分页”。

相关文章
|
6月前
|
开发框架 JavaScript .NET
asp.net中条件查询+分页
asp.net中条件查询+分页
|
3月前
|
开发框架 .NET
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
120 0
|
SQL 开发框架 .NET
在ASP.NET中使用ListView控件对数据进行显示、分页和排序
在ASP.NET中使用ListView控件对数据进行显示、分页和排序
在ASP.NET中使用ListView控件对数据进行显示、分页和排序
|
开发框架 JavaScript .NET
asp.net中条件查询+分页
asp.net中条件查询+分页
138 0
asp.net中条件查询+分页
|
.NET 开发框架 容器
.NET中的repeater简介及分页效果
  Repeater控件是一个数据绑定容器控件,它能够生成各个项的列表,并可以使用模板定义网页上各个项的布局。当该页运行时,该控件为数据源中的每个项重复此布局。     配合模板使用repeater控件    若要使用repeater控件,需创建定义控件内容布局的模板。
1072 0
|
.NET 开发框架
asp.net自制分页页码条控件
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq1010885678/article/details/37504123 用过微软的服务器控件分页的人都知道~那卡的一A啊~ 遂想自制分页页码条控件以备不时之需。
669 0
|
JavaScript 前端开发 .NET
RDIFramework.NET 中多表关联查询分页实例
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chinahuyong/article/details/28416127 RDIFramework.NET 中多表关联查询分页实例 RDIFramework.NET,基于.NET的快速信息化系统开发、整合框架,给用户和开发者最佳的.Net框架部署方案。
969 0
|
2月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
38 7
|
2月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
54 0