• 重学>ASP.NET小实例>DataReader手工分页


    花了两天时间,参考别人写好,

    首先表数据如下:

     

    直接上代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data;
    using System.Data.SqlClient;
    using System.Configuration;

    public partial class learnFenye : System.Web.UI.Page
    {
        SqlConnection sqlconn;
        
    protected void Page_Load(object sender, EventArgs e)
        {
            
    int PageSize = 3;//每页显示条数
            int PageCount = 0;//总共页数
            int RecordCount = 0;//数据库记录条数
            int CurrentPage = 0;//当前页数

            


            
    string conn = ConfigurationManager.ConnectionStrings["conn"].ConnectionString;
            sqlconn 
    = new SqlConnection(conn);
            sqlconn.Open();
            
    //第一步:首先计算数据库的记录条数
            
    //RecordCount=
            RecordCount = CountRecord();
            Response.Write(
    "数据库的记录条数有:" + RecordCount + "<br />");

            
    //第二步: 计算页数
            PageCount = RecordCount / PageSize;
            
    if (RecordCount % PageSize > 0)//如果整除不了,要多出一页
            {
                PageCount 
    = PageCount + 1;
            }
            Response.Write(
    "分页的页数有:" + PageCount + "<br />");


            
    //第三步:获取当前页数
            if (Request.QueryString["page"!= null)
            {
                CurrentPage 
    = Convert.ToInt32(Request.QueryString["page"]);
            }
            
    else
            {
                CurrentPage 
    = 1;//如果没设置,就从第一页开始
            }
            Response.Write(
    "当前页数是:" + CurrentPage + "<br />");


            
    //第四步: 开始分页
            string sql = "SELECT TOP (" + PageSize + ") TicketAutoId, value FROM Ticket ";
            sql 
    += "where TicketAutoId not in (select top " + (CurrentPage - 1* PageSize + " TicketAutoId from Ticket order by TicketAutoId ) ";
            sql 
    += " ORDER BY TicketAutoId";
            SqlCommand sqlcmd 
    = new SqlCommand(sql, sqlconn);
            SqlDataReader sqldr 
    = sqlcmd.ExecuteReader();
            
    string HTMLTable;
            HTMLTable 
    = "<table>";
            
    while(sqldr.Read())
            {
                
                HTMLTable 
    += "<tr><td>"+sqldr.GetInt32(0).ToString()+"</td></tr>";   
                
    //Response.Write(sqldr.GetInt32(0));
            }
            HTMLTable 
    += "</table>";
            Response.Write(HTMLTable);
            
    //sqldr.Close();

            
    //第五步:设置首页,上一页,下一页,末页按钮
            int pagePre, pageNext;
            pagePre 
    = CurrentPage - 1;
            pageNext 
    = CurrentPage + 1;
            
    string pageHtml;

            
    if (pagePre == 0)
            {
                pageHtml 
    = "首页&nbsp;上页";
            }
            
    else
            {
                pageHtml 
    = "<a href='learnfenye.aspx?page=1'>首页</a>&nbsp;<a href='learnfenye.aspx?page=" + pagePre + "'>上页</a>";
            }

            
    if (pageNext > PageCount)
            {
                pageHtml 
    += "&nbsp;下页&nbsp;末页";
            }
            
    else
            {
                pageHtml 
    += "&nbsp;<a href='learnfenye.aspx?page=" + pageNext + "'>下页</a>";
                pageHtml 
    += "&nbsp;<a href='learnfenye.aspx?page=" + PageCount + "'>末页</a>";
            }
            IndexButton.InnerHtml 
    = pageHtml;

        }

        
    private int CountRecord()//统计数据库表的记录条数
        {
            
    int count = 0;
            
    string sql = "select count(*) from Ticket";
            SqlCommand sqlcmd 
    = new SqlCommand(sql, sqlconn);
            SqlDataReader sqldr 
    = sqlcmd.ExecuteReader();
            
    if (sqldr.Read() != null)
            {
                count 
    = sqldr.GetInt32(0);
            }
            sqldr.Close();
            
    return count;
        }
    }

     改进的地方:第三步获取当前页,要判断当前页是否合法。

    //第三部:获取当前页数
                if (Request.QueryString["page"!= null)
                {
                    
    int dangqianyeshu = 1;
                    
    try
                    {
                        dangqianyeshu 
    = Convert.ToInt32(Request.QueryString["page"]);
                        
    if (dangqianyeshu > PageCount)
                        {
                            Response.Write(
    "超过最大页");
                            Response.End();
                        }
                    }
                    
    catch (Exception ex)
                    {
                        Response.Write(
    "页数非法!");
                    }
                    
    finally
                    {
                        CurrentPage 
    = Convert.ToInt32(dangqianyeshu);
                    }
                }
                
    else
                {
                    CurrentPage 
    = 1;
                }
                Response.Write(
    "当前页数是:" + CurrentPage + "<br />");

    读取数据库第一条数据,有专门的读取方法。比如getValue方法,注意getValue方法是返回的是object类型,要转换。


    合乎自然而生生不息。。。
  • 相关阅读:
    团队建设
    风云变幻六十年 平板电脑演变史回顾
    在线ide汇总
    XAMPP中启动tomcat报错的解决方法
    ExtJs 中 xtype 与组件类的对应表
    FineReport关于Linux下字体乱码终极解决方案
    SqlDataReader的关闭问题
    MemberShip学习之:注册用户
    索引超出范围。必须为非负值并小于集合大小。
    利用SiteMapPath控件做论坛导航(也适合其它系统)
  • 原文地址:https://www.cnblogs.com/samwu/p/2082313.html
Copyright © 2020-2023  润新知