项目经验之:如CSDN一样的分页,我能否做这样的分页吗??????

分页大家都做过吧,分页最常见的如

有上下翻页,

有如百度一样翻页

还有如

还有如当当网一样的分页这个下次有机会再列出给大家(朋友给出的)

这篇文章讲到的一个分页,要做成论坛一样的分页格式,都用过CSDN吧,就是像CSDN上翻页样式相似

分页总的说来,大概分为Post分页 与 URL 分页  ,举例来说吧,如大家在做GridView时自带的分页,其实其内含的就是 Post分页的 ,他分页本身URL地址是没有改变的.只是在回传

_doPostBack() 函数,

URL分页,相信大家也用过,静态页面的分页大部分用到的是URL分页,,,  还有就是文章的分页

说多了大家也觉得是多余的,还是看代码强些...........................................

注意我这段代码用到了codeproject网站上的一个组件 ASPnetPagerV2netfx2_0.dll  也是参考codeproject上面例子所做的  我下面的例用到的数据库是 Northwind 数据库

SQL代码段

 

CREATE   PROCEDURE  sp_page
@CurrentPage   int @PageSize   int , @Field_Info   varchar ( 500 ), @Table_info   varchar ( 20 ), @Field_id   varchar ( 10 ), @intOrder   int , @otherwhere   varchar ( 50 ), @RecordCount   int  output, @PageCount   int  output
-- @CurrentPage为显示那一页,@PageSize为每一页显示几行,@Field_info为要显示的字段可以为*,@Table_info为要查询的表或视图,@field_id为按这个字段排序,@intorder0为升序排1为降序排,@otherwhere为条件,@RecordCount为总行数,@PageCount为总页数
AS
begin
    
DECLARE   @MinPage   int @MaxPage   int
    
declare   @sql   varchar ( 1000 )
    
declare   @sqlt   nvarchar ( 300 )
    
declare   @order   varchar ( 4 )
    
set   @Field_Info   =   replace ( @Field_Info , '''' , '' )        -- 除去@field_info中的'
     set   @Table_info   =   replace ( @table_info , '''' , '' )        -- 除去@table_info中的'
     set   @Field_id   =   replace ( @Field_id , '''' , '' )             -- 除去@field_id中的'
     set   @otherwhere   =   replace ( @otherwhere , '''' , '''''' )      -- 将@otherwhere中的'换成''让SQL语句正确释别'
     set   @sqlt   =   ' SELECT @RecordCount = COUNT( '   +   @Field_id   +   ' ) FROM  '   +   @Table_Info
    
exec  sp_executesql  @sqlt ,N ' @RecordCount int output ' , @RecordCount  output      -- 如何将exec执行结果放入变量中,如果是字符串就要用N,N后面的变量一定要和@sqlt里面的变量同名
     IF   @PageSize   <=   0
        
begin
            
set   @PageSize   =   10
        
end
    
else   if   @PageSize   >   @RecordCount
        
begin
            
set   @pageSize   =   @RecordCount
        
end
    
set   @pagecount   =   @RecordCount   /   @PageSize
    
if  (( @recordcount   %   @pagesize !=   0 )                     -- 如果除不尽则加一页
         begin
            
set   @PageCount   =   @RecordCount   /   @PageSize
            
set   @PageCount   =   @pagecount   +   1
        
end
    
else
        
begin
            
set   @pagecount   =   @recordcount   / @PageSize
        
end
    
IF   @CurrentPage   <=   0
        
begin
            
set   @CurrentPage   =   1
        
end
    
else   if   @CurrentPage   >   @pagecount
        
begin         
            
set   @currentpage   =   @pagecount          -- 如果输入页数大于总页数则符最后一页
         end
    
SET   @MinPage   =  ( @CurrentPage   -   1 *   @PageSize   +   1
    
SET   @MaxPage   =   @MinPage   +   @PageSize   -   1
    
    
BEGIN
        
if   @intorder   =   0
            
set   @order   =   ' asc '
        
else
            
set   @order   =   ' desc '
        
if   @Field_Info   like   ''
            
set   @field_Info   =   ' * '
        
if   @otherwhere   like   ''
            
set   @sql   =   ' select  '   +   @Field_Info   +   '  from (select  '   +    @Field_Info   +   '  , row_number() over(order by  '   +   @Field_id   +   '   '   +   @Order   +   ' ) as rownumber from  '   +   @Table_info   +   ' ) as a where rownumber between  '   +   convert ( varchar ( 10 ), @minpage +   '  and  '   +   convert ( varchar ( 10 ), @maxpage )
        
else
            
set   @sql   =   ' select  '   +   @Field_Info   +   '  from (select  '   +    @Field_Info   +   '  , row_number() over(order by  '   +   @Field_id   +   '   '   +   @Order   +   ' ) as rownumber from  '   +   @Table_info   +   ' ) as a where rownumber between  '   +   convert ( varchar ( 10 ), @minpage +   '  and  '   +   convert ( varchar ( 10 ), @maxpage +   '  and  '   +   @otherwhere
        
exec ( @sql )
    
END
end

 

aspx页面中要引用的分页样式表代码:

 

.PagerContainerTable
{
    border-right
:  #333333 1px solid ;
    border-top
:  #333333 1px solid ;
    border-left
:  #333333 1px solid ;
    color
:  #d1d1e1 ;
    border-bottom
:  #333333 1px solid ;
    background-color
:  #FFFFFF ;
}
.PagerInfoCell
{
    padding-right
:  6px ;
    padding-left
:  6px ;
    padding-bottom
:  3px ;
    font
:  bold 11px arial, verdana, geneva, lucida, 'lucida grande' , arial, helvetica, sans-serif ;
    color
:  #f0f1f2 ;
    padding-top
:  3px ;
    white-space
:  nowrap ;
    background-color
:  #990000 ;
    font-weight
: normal ;
}
.PagerInfoCell:link
{
    color
:  #ffcc66 ;
    text-decoration
:  none ;
}
.PagerInfoCell:visited
{
    color
:  #ffcc66 ;
    text-decoration
:  none ;
}
.PagerCurrentPageCell
{
    color
:  #990000 ;
    background-color
:  #FFFF99 ;
}
.PagerOtherPageCells
{
    background-color
:  #f0f1f2 ;
}
.PagerSSCCells
{
    background-color
:  #cccccc ;
}
.PagerHyperlinkStyle
{
    font
:  11px arial, verdana, geneva, lucida, 'lucida grande' , arial, helvetica, sans-serif ;
}
.PagerHyperlinkStyle:hover
{
    color
:  #000000 ;
    text-decoration
:  none ;
    font
:  11px arial, verdana, geneva, lucida, 'lucida grande' , arial, helvetica, sans-serif ;
}
.PagerHyperlinkStyle:link
{
    color
:  #000000 ;
    text-decoration
:  none ;
    font
:  11px arial, verdana, geneva, lucida, 'lucida grande' , arial, helvetica, sans-serif ;
}
.PagerHyperlinkStyle:visited
{
    color
:  #000000 ;
    text-decoration
:  none ;
    font
:  11px arial, verdana, geneva, lucida, 'lucida grande' , arial, helvetica, sans-serif ;
}
.PagerHyperlinkStyle:active
{
    color
:  #000000 ;
    text-decoration
:  none ;
    font
:  11px arial, verdana, geneva, lucida, 'lucida grande' , arial, helvetica, sans-serif ;
}

 

aspx页面代码:

 

<% @ Page Language = " C# "  AutoEventWireup = " true "  CodeFile = " Test_Paging_CSDN.aspx.cs "  Inherits = " Pageing_Default2 "   %>
<% @ Register TagPrefix = " cc1 "  Namespace = " CutePager "  Assembly = " ASPnetPagerV2netfx2_0 "   %>
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >

< html  xmlns ="http://www.w3.org/1999/xhtml"   >
< head  runat ="server" >
    
< title > 无标题页 </ title >
    
< link  href ="lightstyle.css"  type ="text/css"  rel ="stylesheet"   />
</ head >
< body >
    
< form  id ="form1"  runat ="server" >
    
< div >
    
< asp:repeater  id ="Repeater1"  runat ="server" >
                
< HeaderTemplate >
                    
< table  style ="background-color:#ffcc66;"  cellpadding ="5"  cellspacing ="0" >
                        
< tr >
                            
< th  style ="width:70px;" >
                                index
</ th >
                            
< th  style ="width:200px;" >
                                ProductName
</ th >
                        
</ tr >
                    
</ table >
                
</ HeaderTemplate >
                
< ItemTemplate >
                    
< table  cellpadding ="5"  cellspacing ="0"  style ="background-color:#f0f1f2;" >
                        
< tr >
                            
< td  style ="width:70px;"  align ="center" > <% # Eval ( " RowNumber " ) %> </ td >
                            
< td  style ="width:200px;" > <% # Eval ( " ProductName " ) %> </ td >
                        
</ tr >
                    
</ table >
                
</ ItemTemplate >
                
< AlternatingItemTemplate >
                    
< table  cellpadding ="5"  cellspacing ="0"  style ="background-color:#ccccff;" >
                        
< tr >
                            
< td  style ="width:70px;"  align ="center" > <% # Eval ( " RowNumber " ) %> </ td >
                            
< td  style ="width:200px;" > <% # Eval ( " ProductName " ) %> </ td >
                        
</ tr >
                    
</ table >
                
</ AlternatingItemTemplate >
            
</ asp:repeater >
        
< br  />
        
< cc1:pager  id ="pager1"  runat ="server"  oncommand ="pager_Command"  showfirstlast ="true"  PageSize ="10" >
        
</ cc1:pager >
    
</ div >
    
</ form >
</ body >
</ html >

aspx.cs代码

using  System;
using  System.Data;
using  System.Configuration;
using  System.Collections;
using  System.Web;
using  System.Web.Security;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Web.UI.WebControls.WebParts;
using  System.Web.UI.HtmlControls;
using  System.Data.SqlClient;

public   partial   class  Pageing_Default2 : System.Web.UI.Page
{
    
protected   void  Page_Load( object  sender, EventArgs e)
    {
        
if  ( ! IsPostBack)
        {
            pager1.CurrentIndex 
=   1 ;
            BindRepeater(
1 );
        }
    }

    
public   string  strConn  =  DbHelperSql.connectionString.ToString();

    
public   void  pager_Command( object  sender, CommandEventArgs e)
    {
        
int  currnetPageIndx  =  Convert.ToInt32(e.CommandArgument);
        pager1.CurrentIndex 
=  currnetPageIndx;
        BindRepeater(currnetPageIndx);
    }

        
    
private   void  BindRepeater( int  pageNo)
    {
 
        
/*
         @CurrentPage int, --@CurrentPage为显示那一页
        @PageSize int,--@PageSize为每一页显示几行
        @Field_Info varchar(500),--@Field_info为要显示的字段可以为*
        @Table_info varchar(20),--@Table_info为要查询的表或视图
        @Field_id varchar(10),--@field_id为按这个字段排序
        @intOrder int,--@intorder0为升序排1为降序排
        @otherwhere varchar(50),--@otherwhere为条件
        @RecordCount int output,--@RecordCount为总行数
        @PageCount int output--@PageCount为总页数
         
*/
        SqlConnection cn 
=   new  SqlConnection(strConn);

        SqlCommand Cmd 
=   new  SqlCommand( " dbo.sp_page " , cn);
        Cmd.CommandType 
=  CommandType.StoredProcedure;
        SqlDataReader dr;

        Cmd.Parameters.Add(
" @CurrentPage " , SqlDbType.Int,  4 ).Value  =  pageNo;
        Cmd.Parameters.Add(
" @PageSize " , SqlDbType.Int,  4 ).Value  =  pager1.PageSize;
        Cmd.Parameters.Add(
" @Field_Info " , SqlDbType.VarChar,  500 ).Value  =   " * " ;
        Cmd.Parameters.Add(
" @Table_info " , SqlDbType.VarChar,  20 ).Value  =   " Products " ;         // 表名
        Cmd.Parameters.Add( " @Field_id " , SqlDbType.VarChar,  10 ).Value  =   " ProductID " ;
        Cmd.Parameters.Add(
" @intOrder " , SqlDbType.Int).Value  =   1 ;              // 排序
        Cmd.Parameters.Add( " @otherwhere " , SqlDbType.VarChar, 50 ).Value  =   "" ;        // 条件
        Cmd.Parameters.Add( " @RecordCount " , SqlDbType.Int).Direction  =  ParameterDirection.Output;    // 总行数
        Cmd.Parameters.Add( " @PageCount " , SqlDbType.Int).Direction  =  ParameterDirection.Output;
        cn.Open();
        dr 
=  Cmd.ExecuteReader();

        Repeater1.DataSource 
=  dr;
        Repeater1.DataBind();

        dr.Close();
        cn.Close();

        Int32 _totalRecords 
=  Convert.ToInt32(Cmd.Parameters[ " @RecordCount " ].Value);
        pager1.ItemCount 
=  _totalRecords;
        pager1.PageCount 
=  Convert.ToInt32(Cmd.Parameters[ " @PageCount " ].Value);
    }
}

Web.Config文件

//这里你可以改成自已本地数据库测试即可

< connectionStrings >
        
< add  name ="NorthwindConnectionString"  connectionString ="User ID=sa;pwd=sa;Initial Catalog=NORTHWND;Data Source=WANGYONGJUN\SQLEXPRESS"  providerName ="System.Data.SqlClient" />
</ connectionStrings >

 

好了,这只是一个例子,希望有助于大家的学习,........................................................

代码下载:/Files/accpfriend/Paging4.rar (有什么问题可留言)

没有最好,只有更好。

 

转载于:https://www.cnblogs.com/accpfriend/archive/2008/11/10/1330635.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值