zoukankan      html  css  js  c++  java
  • 新闻系统——真假分页

           牛腩中,当我们的新闻数据很少时,完全可以在一页显示,而且也不会破坏界面的布局,但当数据很多的时候,就会影响页面的布局,而且用户等待时间就会加长,试想谁会愿意一直在等待呢?我们就必须想办法来解决这个问题。

    一种方法为假分页,另一种方法为真分页。

    假分页:

    将数据库中数据全部取出来之后,在显示的时候分页显示,这样当数据库中数据量很多的时候就会一直等待。

    实现假分页的代码。

            /// <summary>
            /// 点击下一页
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            protected void gvHotNews_PageIndexChanging(object sender, GridViewPageEventArgs e)
            {
                gvHotNews.PageIndex = e.NewPageIndex;
                NewsManager nm = new NewsManager();
    
                gvHotNews.DataSource = nm.SelectNewNews();
                gvHotNews.DataBind();
            }
    代码很简单,但是必须在web中添加这个事件(红字部分),否则无法触发该方法:

         <asp:GridView ID="gvNewNews" runat="server" AutoGenerateColumns="False" BorderWidth="0"               GridLines="None" AllowPaging="True" <span style="color:#ff0000;">OnPageIndexChanging ="gvNewNews_PageIndexChanging" </span>               PageSize="5">
    真分页:

    顾名思义,就是直接从数据库中取出该页面显示的新闻,当跳转到下一页再取出该页所需要的数据,这样就实现了真正的分页,从源头来解决问题。

    1、添加AspNetPager控件(需要下载)、

    2、添加.dll文件,并且添加到工具箱中

    3、实现

         Web

       <span style="font-family:KaiTi_GB2312;"> 界面: <webdiyer:AspNetPager ID="anp" runat="server" FirstPageText ="首页" 
                  LastPageText ="尾页" NextPageText ="下一页" PrevPageText ="上一页" 
                  OnPageChanged ="anp_PageChanged" PageSize ="5" AlwaysShow ="true" >
              </webdiyer:AspNetPager></span>
        <span style="font-family:KaiTi_GB2312;">实现  protected void Page_Load(object sender, EventArgs e)
                {              
                    //已登录
                    if (!Page.IsPostBack)
                    {
                        DataTable dt = new DataTable();
                        dt = nm.SelectAll();
                        anp.RecordCount = dt.Rows.Count;
                        BindNews();
                    }
                 }</span>

    <span style="font-family:KaiTi_GB2312;font-size:18px;">        //绑定新闻列表
            public void BindNews()
            {
                int start = anp.StartRecordIndex;
                int end = anp.EndRecordIndex;
                
                repNews.DataSource = new NewsManager().SelectPage(start,end );
                repNews.DataBind();
            }</span>

                    D层

            <span style="font-family:KaiTi_GB2312;">/// <summary>
            /// 新闻分页显示
            /// </summary>
            /// <param name="start"></param>
            /// <param name="end"></param>
            /// <returns></returns>
            public DataTable SelectPage(int start, int end)
            {
                DataTable dt = new DataTable();
                string cmdText = "news_selectPage";
                SqlParameter[] paras = new SqlParameter[]{
                    new SqlParameter ("@start",start ),
                    new SqlParameter ("@end",end)
                };
                dt = sqlhelper.ExecuteQuery(cmdText, paras, CommandType.StoredProcedure );
                return dt;
            }</span>
    存储过程:

          <span style="font-family:KaiTi_GB2312;">CREATE PROCEDURE [dbo].[news_selectPage]
    	   @start integer,
    	   @end integer
          AS
          BEGIN
    		SET NOCOUNT ON;
    		with tempt as (
    		SELECT ROW_NUMBER() over (order by id desc )as row, * from news T)
    		SELECT * FROM tempt where row between @start and @end
    		 
          END
          GO</span>
    接下来直接B层来调用D层,只要写一个方法就可以了,这里不再详细写了。下面是显示效果:

                           

    在这之中会出现一个问题:


           经过查阅资料——AspNetPager分页示例—配合UpdatePanel实现无刷新分页看了代码之后,终于找到原因,将ScriptManager添加到UpdatePanel之前,如图所示:

           

          这一番奋斗之后,终于实现了真假分页,真假分页实际上就是我们是否从根源解决问题,真分页从源头解决了问题,假分页只是从表相来实现了。真分页在之后的网页设计中还会遇到,多实践才能多发现,一起向前奋斗吧。


  • 相关阅读:
    如何把项目部署到OSChina上
    读书笔记----10日摘抄整理(05)
    读书笔记----10日摘抄整理(04)
    读书笔记----10日摘抄整理(03)
    读书笔记----10日摘抄整理(02)
    读书笔记----10日摘抄整理(01)
    前五题半
    作业3
    作业: 1.8(圆的面积和周长)编写程序,使用以下的公式计算并显示半径为5.5的圆的面积和周长。
    作业:1.12假设一个跑步者1小时40分钟35秒 内跑了24英里。编写一个程序显示以每小时多少公里为单位的平均速度值(注意,1英里等于1.6公里。)
  • 原文地址:https://www.cnblogs.com/zsswpb/p/5771650.html
Copyright © 2011-2022 走看看