项目经验之:如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 (有什么问题可留言)

没有最好,只有更好。

 

posted @ 2008-11-10 13:52  GIS发展  阅读(609)  评论(1编辑  收藏  举报