数据分页

新建用户控件pageno.ascx

Code

后台pageno.ascx.cs    
Code
BLL层PageList.cs
Code

DAL层PageList.cs

Code

Default.aspx

Code

Default.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;

namespace YPEN.Web
{
    
public partial class Default : System.Web.UI.Page
    {
        
protected void Page_Load(object sender, EventArgs e)
        {
            
if (!Page.IsPostBack)
            {
                Bind();
            }
        }
        
private void Bind()
        {
            
string strURl = Request.RawUrl;
            strURl 
= strURl.Substring(0, strURl.IndexOf(".aspx")) + ".aspx";
            strURl 
+= "?Z=0";
            
int pageSize = 2;//这里设置分页尺寸
            int pageIndex = 1;
            
string strWhere = "1=1 ";
            
if (Request.QueryString["page"!= null)
            {
                pageIndex 
= Convert.ToInt32(Request.QueryString["page"].ToString());
            }
            pageno1.Strurl 
= strURl; //当前页url
            pageno1.FldName = "id"//排序字段
            pageno1.Table = "city";//表名
            pageno1.StrGetFields = "*";//查询字段 
            pageno1.PageSize = pageSize; //页面数目
            pageno1.Where = strWhere; //过滤条件
            pageno1.Pageindex = pageIndex;
            DataTable dt 
= pageno1.BindView();
            
this.DataList1.DataSource = dt.DefaultView;
            
this.DataList1.DataBind();
        }
    }
}

 分页所用存储过程

代码
if object_id('[SP_Pagination]'is not null drop procedure [SP_Pagination]
go
USE [ypentest]
GO
/****** 对象:  StoredProcedure [dbo].[SP_Pagination]    脚本日期: 01/30/2010 11:08:32 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[SP_Pagination]
@tblName   varchar(255),             -- 表名 .
@strGetFields   varchar(1000=''-- 需要返回的列   
@fldName   varchar(255)= ' ',        -- 排序的字段名 
@PageSize   int   =   10,            -- 页尺寸 
@PageIndex   int   =   1,            -- 页码 
@doCount   bit   =   0,              -- 返回记录总数,非 0 值则返回 
@OrderType   int   =   0,            -- 设置排序类型,非 0 值则降序 
@strWhere   varchar(1500=' ' ,      -- 查询条件(注意: 不要加where) 
@keyDate   varchar(1500=' '
AS 
declare   @strSQL   varchar(5000)    -- 主语句 
declare   @strTmp   varchar(110)     -- 临时变量 
declare   @strOrder   varchar(400)   -- 排序类型 
declare   @fldNames   varchar(100)     -- 排序字段,如果两张表,只查询单张表的数据,去掉前面的表名
declare   @str        varchar(100)
if @doCount != 0 
begin 
    
if @strWhere != ' ' 
        
set @strSQL = 'select count(*) as Total from ' +@tblName+ ' where '+@strWhere 
    
else 
        
set @strSQL = 'select count(*) as Total from ' +@tblName+ ' ' 
end   
--以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况: 
else 
begin 
    
declare @length int
    
declare @str1   varchar(100)
    
set @str1=@fldName;
    
if charindex(',',@fldName,0)>0
    
begin 
        
set @str=SUBSTRING(@fldName,CharIndex(',',@fldName,0)+1,len(@fldName))
        
if charindex('.',@str,0)>0 
        
begin
            
set @length=CharIndex('.',@str,0)
            
set @fldNames=SUBSTRING(@str,@length+1,len(@str))
        
end
        
else
        
begin
            
set @fldNames=@str
        
end
    
end
    
else
    
begin
        
if charindex('.',@fldName,0)>0 
        
begin
            
set @length=CharIndex('.',@fldName,0)
            
set @fldNames=SUBSTRING(@fldName,@length+1,len(@fldName))
        
end
        
else
        
begin
            
set @fldNames=@fldName
        
end
    
end

    
if charindex(',',@fldName,0)>0
    
begin
        
set @str=SUBSTRING(@fldName,0,CharIndex(',',@fldName,0))+','
        
set @fldName=SUBSTRING(@fldName,CharIndex(',',@fldName,0)+1,len(@fldName))
    
end
    
else
    
begin
        
set @str=''
    
end 
 
    
if @OrderType = 1 
    
begin 
        
set @strTmp = ' <(select   min ' 
        
set @strOrder =' order by '+ @str  +@fldName+ ' desc ' 
    
--如果@OrderType不是0,就执行降序,这句很重要! 
    end 
    
else if @OrderType = 0
    
begin 
        
set @strTmp = '> (select max ' 
        
set @strOrder =' order by '+ @str  +@fldName+ ' asc ' 
    
end 
    
else
    
begin 
        
set @strTmp = 'NOT IN (SELECT TOP ' 
        
set @strOrder =' order by '+ @str  +@fldName+ ' asc ' 
    
end 
    
if   @PageIndex = 1 
    
begin 
        
if @strWhere != ' ' 
            
set @strSQL = 'select top ' + str(@PageSize)+ ' ' +@strGetFields+ ' from ' +@tblName+ ' where ' +@strWhere+ ' ' +@strOrder 
        
else 
            
set @strSQL = 'select top ' + str(@PageSize)+ ' ' +@strGetFields+ ' from ' +@tblName+ ' ' +@strOrder 
   
--如果是第一页就执行以上代码,这样会加快执行速度 
    end 
    
else 
    
begin 
   
--以下代码赋予了@strSQL以真正执行的SQL代码   
        set @strSQL = 'select top ' +str(@PageSize)+ ' ' +@strGetFields+ ' from ' +@tblName+ ' where ' +@fldName+ ' ' +@strTmp+ '' +@fldNames+ ') from (select top ' +str((@PageIndex-1)*@PageSize)   
+ ' ' +@fldName+ ' from ' +@tblName+ ' ' +@strOrder+ ') as tblTmp) ' +@strOrder 

        
if @strWhere != ' ' 
            
if(charindex(',',@str1,0)>0)
                
set @strSQL = 'select top ' +str(@PageSize)+ ' ' +@strGetFields+ ' from ' +@tblName+ ' where ' +@strWhere+ ' and  ' +@keyDate+ ' not in (select top ' +str((@PageIndex-1)*@PageSize)  
+ ' '+ @keyDate+  ' from ' +@tblName+ ' where ' +@strWhere+ ' ' +@strOrder+ ''  +@strOrder 
            
else
                
set @strSQL = 'select top ' +str(@PageSize)+ ' ' +@strGetFields+ ' from ' +@tblName+ ' where ' +@fldName+ ' ' +@strTmp + '' +@fldNames+ ') from (select top ' +str((@PageIndex-1)*@PageSize)  
+ ' ' +@fldName+ ' from ' +@tblName+ ' where ' +@strWhere+ ' ' +@strOrder+ ') as tblTmp) and ' +@strWhere+ ' ' +@strOrder 
    
end   
end
exec   (@strSQL






原文地址:https://www.cnblogs.com/yinpeng186/p/1660042.html