asp.net分页原理

CSDN论坛上看到了,收藏----
原文地址:http://topic.csdn.net/u/20080523/19/c0159c01-1545-4033-94fb-287a70ee1c97.html

public partial class News_PageSplit : System.Web.UI.Page
{
   
int PageCount = 5;
   
   
protected void Page_Load(object sender, EventArgs e)
    {
       
if (!Page.IsPostBack)
        {
           
int PageCurrent =1;
           
            ShowMes(PageCurrent, PageCount);
         
        }
    }
   
public void ShowMes(int pagecurrent,int pagecount)
    {
        SqlConnection Conn
= new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["PhotoConn"]);
        Conn.Open();
        SqlDataAdapter da
=new SqlDataAdapter ("PageSplit",Conn);
        da.SelectCommand.CommandType
=CommandType.StoredProcedure;
       
//SqlParameter[] myparam ={  new SqlParameter("@PageCurrent",pagecurrent),
       
//                           new SqlParameter("@PageCount",pagecount)                         
       
//                        };
       da.SelectCommand.Parameters.Add("@PageCurrent", pagecurrent);
       da.SelectCommand.Parameters.Add(
"@pageCount",pagecount);
       da.SelectCommand.Parameters.Add(
"@PageTotal",SqlDbType.Int);
       da.SelectCommand.Parameters[
"@PageTotal"].Direction = ParameterDirection.Output;

       
//绑定数据源

       DataSet ds
= new DataSet();
       da.Fill(ds);
       
//总记录数
       double total = Convert.ToDouble(da.SelectCommand.Parameters["@PageTotal"].Value);
       
//总页数
       double page = Math.Ceiling(total / PageCount);
       
//当前页
       LabCurrent.Text = pagecurrent.ToString();
      
//总共有多少页
       LabCount.Text = page.ToString();

       GridView1.DataSource
= ds;
       GridView1.DataBind();

       BindButton();
    }
   
protected void LinkButton2_Click(object sender, EventArgs e)
    {
           
int current = int.Parse(LabCurrent.Text) - 1;
            LabCurrent.Text
= current.ToString();
            ShowMes(current, PageCount);
     
    }
   
protected void LinkButton1_Click(object sender, EventArgs e)
    {
           
int current = int.Parse(LabCurrent.Text) + 1;
            LabCurrent.Text
= current.ToString();
            ShowMes(current, PageCount);
    }
   
public void BindButton()
    {
       
if (LabCurrent.Text == "1")
        {
            LbPrev.Enabled
= false;
        }
       
else
        {
            LbPrev.Enabled
= true;
        }

       
if (LabCurrent.Text == LabCount.Text)
        {
            LBnext.Enabled
= false;
        }
       
else
        {
            LBnext.Enabled
= true;
        }
    }
}

-----------------------------------------------------------------------
-----------------------------------------------------------------------
--SQL
ALTER PROCEDURE PageSplit
(
 
@PageCurrent int, --当前页
  @PageCount int, --每页的数量
  @PageTotal int output --总共有多少记录
)
AS
   
declare @Start int --当前页的第一行是总记录的第几行
    declare @Last int  --当前页的最后一行是总记录的第几行
   
   
set @Start=(@PageCurrent-1)*@PageCount+1
   
set @Last=@PageCurrent*@PageCount
   
   
--得到总记录数
    set @PageTotal=(select count(*) from NewsInfo)
   
   
--查询的信息
    select NewsTitle,NewsDate from NewsInfo where NewsID between @Start and @Last order by NewsDate desc
   
   
RETURN

posted @ 2008-05-25 00:47  DataReader  阅读(1016)  评论(3)    收藏  举报