【asp.net】asp分页<牛腩>

前言

在我们平时浏览网页时,都会遇到样式各异的分页,这样做既美观,又减少了系统的压力,一举多得。鉴于牛腩新闻发布系统中,牛腩老师只讲了分页的方法,并举了个例子,并没有真正将分页融合到系统中,今天我就将分页融合到系统的方法分享给大家。

假分页

顾名思义,这个不是真正的分页,而是先选择出所有的记录后在进行分页。如下:

首先,我们打开gridview控件的属性,将gridview的AllowPaging属性改为True,然后,可以更改的它的PageSize属性,来控制每页显示的数据。最后,打开该控件的事件,找到PageIndexChanging方法,双击进入。如下图:

在PageIndexChanging事件方法下:

gvNewNews.PageIndex = e.NewPageIndex;
gvNewNews.DataSource=new NewsManager().SelectAll();
gvNewNews.DataBind();

这一步的操作就是将页数的索引传入gridview中,然后根据索引完成页数的点选。

优缺点:

优:操作简单,容易实现,对于小批量的数据操作得心应手。

缺:每次翻页执行的都是SelectAll方法,也就是说,每次翻页都会将数据库中所有的新闻重新选出来一次,影响系统速度,如果数据量大到一定程度,时间超慢不说,还可能引起系统崩溃。

真分页

刚说了假分页,肯定就会有一个真分页,真分页的意思就是只从数据库中选择当前页的记录,也就是说,这个页有多条记录,就从数据库取相应的多少条,相比之下,这样做的执行效率要高出假分页太多。以新闻管理页面为例,下面来看实现步骤。

首先,这个是用了一个asp.net的控件,叫做Aspnetpager,我们先把这个控件引入到系统中,具体引入方法就不必多说。直接分析,首先,根据牛腩老师给我们的例子,我们需要两个方法,一个方法取出我们需要区间的新闻,一个方法需要知道新闻总条数。这两个方法的如下:

        /// <summary>
        /// 全部新闻分页设计
        /// </summary>
        /// <param name="startindex">开始条数</param>
        /// <param name="endindex">结束条数</param>
        /// <returns></returns>
        public DataTable SelectAllNewsPage(int startindex, int endindex)
        {
            SqlParameter[] paras ={
                                    new SqlParameter("@startindex",startindex),
                                    new SqlParameter("@endindex",endindex)
                                };
            string sql = "news_SelectAllNewsPage";
            DataTable dt = sqlhelper.ExecuteReader(sql, CommandType.StoredProcedure, paras);
            return dt;
        }
        /// <summary>
        /// 查询全部新闻条数
        /// </summary>
        /// <returns></returns>
        public string CountAllNews()
        {
            SqlParameter[] paras = { };
            string sql = @"select count(*) from news";
            DataTable dt = sqlhelper.ExecuteReader(sql, CommandType.Text, paras);
            string count = dt.Rows[0][0].ToString();
            return count;
        }

相应存储过程:

USE [newssystem]
GO
/****** Object:  StoredProcedure [dbo].[news_SelectAllNewsPage]    Script Date: 05/05/2016 16:33:13 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[news_SelectAllNewsPage]
	@startindex int,
	@endindex int
AS
BEGIN
	with temptbl as (
		select ROW_NUMBER() over(order by id desc)as Row,* from news)
		select * from temptbl where Row between @startindex and @endindex
END

方法我们写完了,现在我们开始构造U层。首先,将aspnetpager控件拖到设计器中,如图,

然后,在相应的后台设计中就会出现如下字段:

稍微做一下命名:

这样我们的控件就算是添加成功了。接下来我们要在左下角的设计视图中,双击该控件,显示出该控件的PageChanged方法。在该方法下:

        /// <summary>
        /// 分页设计
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void anp_PageChanged(object sender, EventArgs e)
        {
            int startindex = anp.StartRecordIndex;
            int endindex = anp.EndRecordIndex;
            DataTable dt = new NewsManager().SelectAllNewsPage(startindex, endindex);
            //绑定新闻列表
            repNews.DataSource = dt;
            repNews.DataBind();
        }

然后,在该页面的Page_Load中写:

anp.RecordCount = int.Parse(new NewsManager().CountAllNews());//获取新闻总数

这样,我们的新闻分页就做好了。等下,是不是发现如果点击页数,分页能正常显示,但是在页面第一次加载的时候,却发现还是长长的一条,没有分页,这是我们的SelectAll方法在作怪(Page_Load中绑定的是SelectAll方法),该方法选取了全部的新闻,为了使界面完美,我对该方法做了修改:

        /// <summary>
        /// 选择全部新闻
        /// </summary>
        /// <returns></returns>
        public DataTable SelectAll()
        {
            SqlParameter[] paras = { };
            DataTable dt = new DataTable();
            string sql = @"with temptbl as (
		select ROW_NUMBER() over(order by id desc)as Row,* from news)
		select * from temptbl where Row between 1 and 7";

            dt = new SQLHelper().ExecuteReader(sql, CommandType.Text, paras);
            return dt;
        }

(跟存储过程类似,只不过是将开始条数和结束条数固定化,默认第一页)

这样,我的牛腩新闻发布系统分页设计就算做完了。

总结

很多知识,很多技术,我们只是感觉会,看了懂,真正做起来却并不是那么如意,这个分页我做了一天多,深刻体会了纸上得来终觉浅,绝知此事要躬行的道理。在下篇博客中,我将总结list页面中添加分页以及遇到的问题。欢迎大家提出宝贵的意见或建议。

时间: 2024-08-29 18:04:22

【asp.net】asp分页<牛腩>的相关文章

ASP.NET——真假分页

所谓分页,就是把所有要显示的内容分成n多页来显示.那为什么要用分页而不直接全部显示呢?这就好比一本书,我们可以用一张纸写完全部书的内容,但实际上并不是这么做的.我们把网页分成一页一页的,其实很大程度上是在为用户考虑,极大的方便用户. 分页有两种,一种是真分页,一种是假分页. 假分页的"假"在于我已经把所有的数据取出来了,只是在显示的时候给予一定的控制来到达分页的效果. 真分页的"真"在于所有的数据并非一次取出,而是真真正正的用户查看哪一页才去数据库中取出所需的内容.

ASP.NET中分页显示

分页详解,ASP.NET书本  "数据空间应用" (1)使用GridView控件分页显示 步奏:1.添加GridView控件 2.将GrideView控件的AllowPaging属性设置为True,表示允许分页  3.将PageSize属性设置一个数字,用来控制每页中显示的记录数 4.最后在GridView控件的PageIndexChanging事件中设置GridView控件的PageIndex属性为当前页的索引值,并重新绑定GridView控件 (2)DataList控件中的数据 u

ASP.NET真假分页—真分页

 承接上篇博文<ASP.NET真假分页-假分页>:http://blog.csdn.net/u010773667/article/details/38845009,继续讲解ASP.NET真假分页之真分页. 真分页 当数据量过大,有几万甚至十几万条数据时,每次都从数据库中取出所有数据就会降低查询效率,系统运行慢,还有可能卡死,这时假分页就会显得很不人性化,因此有了真分页的必要性. 正如上篇博文总结归纳,"真"相对于"假"存在,即不藕断丝连,从根部彻底断

ASP.NET MVC 分页MvcPager

ASP.NET MVC 分页MvcPager 开源框架  admin  8个月前 (08-20)  1484浏览 他连续12年获得微软MPV称号,几年前,他写的ASP.NET分页控件,被很多.NET开发人员使用,现在他又写了名为MvcPager的分页扩展,并免费开源,支持MVC通用分页,与EF完美结合,支持AJAX分页,简单灵活,提供多个演示案例,是迄今为止最好的MVC分页方式,推荐各位ASP.NET MVC开发者使用. 分页是每个项目必须面对的技术点,不好的分页不但体验不好,而且会影响系统的整

Asp.Net MVC 分页、检索、排序整体实现

原文:Asp.Net MVC 分页.检索.排序整体实现 很多时候需要这样的功能,对表格进行分页.排序和检索.这个有很多实现的方式,有现成的表格控件.用前端的mvvm,用户控件.但很多时候看着很漂亮的东西你想进一步控制的时候却不那么如意.这里自己实现一次,功能不是高大全,但求一个清楚明白,也欢迎园友拍砖.前端是bootstrap3+jPaginate,后台基于membership.没什么难点. 先上效果图. 分页其实就是处理好 每页项目数.总项目数.总页数.当前页.为了方便复用,就先从仓库开始说起

ASP.NET MVC分页实现之改进版-增加同一个视图可设置多个分页

我之前就已经实现了ASP.NET MVC分页(查看该博文),但它有局限性,必须确保在同一个视图中只能有一处分页,若需要在同一个视图中设置多个分页,却无能为力,为此,我重新对原先的代码进行了优化,增加了更为灵活的配置属性及生成规则,解决了上述问题,代码如下: 一.PageInfo类 using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace ROIS.Models {

asp.net数据分页方法

/// <summary> /// 数据分页方法 /// </summary> /// <param name="PageIndex">当前页</param> /// <param name="PageSize">每页显示数量</param> /// <param name="PageCount">总数据</param> /// <param n

Asp.Net真分页技术

最近学校要做课题,闲来没事研究了下Asp.net的分页,我使用Repeater进行数据的绑定,每次从数据库读取到8条数据填充到Repeater中,这样搞可以降低数据库的压力,提高效率. 效果图如下: 数据库设计如下: 附加一下代码: <html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"><meta http-equiv="Content-Type&quo

asp:ObjectDataSource+asp:GridView 实现真分页

<asp:GridView ID="GridViewCacheManager" DataSourceID="OdsCacheManager" runat="server" Width="100%" CssClass="datable" border="0" CellPadding="4" OnRowDataBound="GridViewCacheMan

asp、asp.net、.aspx、.ascx、.ashx的简单说明

ASP是动态服务器页面(Active Server Page)的英文缩写.[1]是微软公司开发的代替CGI脚本程序的一种应用,它可以与数据库和其它程序进行交互,是一种简单.方便的编程工具.ASP的网页文件的格式是.asp.现在常用于各种动态网站中. ASP.NET是由微软在·NETFramework框架中所提供,开发Web应用程序的类库,封装在System.Web.dll文件中,显露出System.Web命名空间,并提供ASP.NET网页处理.扩充以及HTTP通道的应用程序与通信处理等工作,以及