当前位置:编程学习 > C#/ASP.NET >>

asp.net分页都有哪几种方法?

我只知道两种。
1。用DATATABLE获取整张数据库表,然后在后台把要显示的那几行绑定到前台。

2。直接获取数据库中要显示的那几行,然后把获取的数据绑定到前台。

请问还有其他的方法吗? --------------------编程问答-------------------- 有谁知道还有其他方法吗?我也想知道` --------------------编程问答-------------------- 存储过程分页
SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO

ALTER  proc sp_Pages   

@sql         ntext,     --要执行的sql语句

@PageCurrent int=1,     --要显示的页码

@PageSize    int=10,    --每页的大小

@RecordCount int output, --总记录数

@PageCount   int OUTPUT --总页数

AS

SET NOCOUNT ON

DECLARE @p1 int

--初始化分页游标

EXEC sp_cursoropen 

    @cursor=@p1 OUTPUT,

    @stmt=@sql,

    @scrollopt=1,

    @ccopt=1,

    @rowcount=@PageCount OUTPUT


--计算总记录数

set @RecordCount=@PageCount

--计算总页数

IF ISNULL(@PageSize,0)<1 

    SET @PageSize=10

SET @PageCount=(@PageCount+@PageSize-1)/@PageSize

IF ISNULL(@PageCurrent,0)<1 OR ISNULL(@PageCurrent,0)>@PageCount

    SET @PageCurrent=1

ELSE

    SET @PageCurrent=(@PageCurrent-1)*@PageSize+1



--显示指定页的数据

EXEC sp_cursorfetch @p1,16,@PageCurrent,@PageSize



--关闭分页游标

EXEC sp_cursorclose @p1



GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

--------------------编程问答-------------------- 分页的技术有很多,因人而异,比如pagesdatasouce --------------------编程问答-------------------- 支持多字段排序
================================
CREATE PROC P_viewPage
    /*
        no_mIss 分页存储过程 2007.2.20  QQ:34813284
        适用于单一主键或存在唯一值列的表或视图          
    */

    @TableName VARCHAR(200),     --表名
    @FieldList VARCHAR(2000),    --显示列名
    @PrimaryKey VARCHAR(100),    --单一主键或唯一值键
    @Where VARCHAR(1000),        --查询条件 不含'where'字符
    @Order VARCHAR(1000),        --排序 不含'order by'字符,如id asc,userid desc,当@SortType=3时生效
    @SortType INT,               --排序规则 1:正序asc 2:倒序desc 3:多列排序
    @RecorderCount INT,          --记录总数 0:会返回总记录
    @PageSize INT,               --每页输出的记录数
    @PageIndex INT,              --当前页数
    @TotalCount INT OUTPUT,      --返回记录总数
    @TotalPageCount INT OUTPUT   --返回总页数
AS
    SET NOCOUNT ON
    IF ISNULL(@TableName,'') = '' OR ISNULL(@FieldList,'') = '' 
        OR ISNULL(@PrimaryKey,'') = ''
        OR @SortType < 1 OR @SortType >3
        OR @RecorderCount < 0 OR @PageSize < 0 OR @PageIndex < 0
    BEGIN        
        RETURN
    END
 
    DECLARE @new_where1 VARCHAR(1000)
    DECLARE @new_where2 VARCHAR(1000)
    DECLARE @new_order VARCHAR(1000)   
    DECLARE @Sql VARCHAR(8000)
    DECLARE @SqlCount NVARCHAR(4000)

    IF ISNULL(@where,'') = ''
        BEGIN
            SET @new_where1 = ' '
            SET @new_where2 = ' WHERE  '
        END
    ELSE
        BEGIN
            SET @new_where1 = ' WHERE ' + @where 
            SET @new_where2 = ' WHERE ' + @where + ' AND '
        END

    IF ISNULL(@order,'') = '' OR @SortType = 1  OR @SortType = 2 
        BEGIN
            IF @SortType = 1 SET @new_order = ' ORDER BY ' + @PrimaryKey + ' ASC'
            IF @SortType = 2 SET @new_order = ' ORDER BY ' + @PrimaryKey + ' DESC'
        END
    ELSE
        BEGIN
            SET @new_order = ' ORDER BY ' + @Order
        END

    SET @SqlCount = 'SELECT @TotalCount=COUNT(*),@TotalPageCount=CEILING((COUNT(*)+0.0)/'
                    + CAST(@PageSize AS VARCHAR)+') FROM ' + @TableName + @new_where1
    
    IF @RecorderCount = 0
        BEGIN
             EXEC SP_EXECUTESQL @SqlCount,N'@TotalCount INT OUTPUT,@TotalPageCount INT OUTPUT',
                               @TotalCount OUTPUT,@TotalPageCount OUTPUT
        END
    ELSE
        BEGIN
             SELECT @TotalCount = @RecorderCount            
        END

    IF @PageIndex > CEILING((@TotalCount+0.0)/@PageSize)
        BEGIN
            SET @PageIndex =  CEILING((@TotalCount+0.0)/@PageSize)
            if @PageIndex=0 
             begin
                    set  @PageIndex=1
            end 
        END
    IF @PageIndex = 1
        BEGIN
            SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM ' 
                       + @TableName + @new_where1 + @new_order
        END
    ELSE
        BEGIN
            IF @SortType = 1
                BEGIN
                    SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM ' 
                               + @TableName + @new_where2 + @PrimaryKey + ' > '
                               + '(SELECT MAX(' + @PrimaryKey + ') FROM (SELECT TOP '
                               + STR(@PageSize*(@PageIndex-1)) + ' ' + @PrimaryKey 
                               + ' FROM ' + @TableName
                               + @new_where1 + @new_order +' ) AS TMP) '+ @new_order
                END
            IF @SortType = 2
                BEGIN
                    SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM ' 
                               + @TableName + @new_where2 + @PrimaryKey + ' < '
                               + '(SELECT MIN(' + @PrimaryKey + ') FROM (SELECT TOP '
                               + STR(@PageSize*(@PageIndex-1)) + ' ' + @PrimaryKey 
                               +' FROM '+ @TableName
                               + @new_where1 + @new_order + ') AS TMP) '+ @new_order                               
                END       
            IF @SortType = 3
                BEGIN
                    IF CHARINDEX(',',@Order) = 0 BEGIN RETURN END
                    SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM '
                               + @TableName + @new_where2 + @PrimaryKey + ' NOT IN (SELECT TOP '
                               + STR(@PageSize*(@PageIndex-1)) + ' ' + @PrimaryKey
                               + ' FROM ' + @TableName + @new_where1 + @new_order + ')'
                               + @new_order
                END
        END
--  print @sql
    EXEC(@Sql)
GO
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,