重学>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类型,要转换。

posted @ 2011-06-16 09:05  草珊瑚  阅读(557)  评论(0编辑  收藏  举报