初学ASP.NET分页控件

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;

namespace MyComplexControls
{
    [DefaultProperty(
"Text")]
    [ToolboxData(
"<{0}:MyNavigation runat=server></{0}:MyNavigation>")]
    
public class MyNavigation : WebControl,INamingContainer
    
{
        
创建控件对象

        
自定义属性

        
定义方法
    }


    
public enum ControlType
    

        DataList,
        GridView
    }


    
public enum ButtonType
    

        LinkButton,
        ImageButton
    }

}



存储过程

create  PROC proc_Navigation
@tableName varchar(
100), --要分页显示的表名
@PageCurrent 
int=1--要显示的页码
@PageSize 
int=10--每页的大小(记录数)
@FieldShow nvarchar(
1000)=''--以逗号分隔的要显示的字段列表,如果不指定,则显示所有字段
@FieldOrder nvarchar(
1000)=''--以逗号分隔的排序字段列表,可以指定在字段后面指定DESC/ASC,用于指定排序顺序
@Where    nvarchar(
1000)=''--查询条件
@PageCount 
int output
as
  SET XACT_ABORT ON           
-- 打开 try功能 
  BEGIN TRY             
--开启事务
    begin tran
  
/***(游标)获取表主键(多个用逗号分隔)***/
  declare @keyName varchar(
200)
  declare @name varchar(
200)
  
set @keyName=''
  declare mycursor cursor
  
for  
    select column_name from information_schema.key_column_usage 
   
where table_name = @tableName and constraint_name like 'PK_%'
    open mycursor
    fetch mycursor into @name
    
while @@fetch_status<>-1
   
if @@fetch_status <>-2
     begin
      
set @keyName = @keyName + @name + ',' 
      fetch mycursor into @name
     end  
    close mycursor
    deallocate mycursor
  
set @keyName = subString(@keyName,1,len(@keyName)-1)


  
/***设置要显示的字段***/
  declare
  @FieldShow1 varchar(
1000)

  
if len(@FieldShow)=0
   begin
    
set @FieldShow1 = ' * '      --输入的要显示的字段为空字符串时,设置为*
   end
  
else
   begin
    
set @FieldShow1 = @FieldShow    --将要显示的字段名赋值给变量@FieldShow1
   end

  
/***设置排序字段***/
  declare 
  @FieldOrder1 varchar(
100)

  
if len(@FieldOrder) = 0
   begin
    
set @FieldOrder1 = ''
   end
  
else
   begin
    
set @FieldOrder1 = ' order by '+@FieldOrder
   end

  
/***设置where条件***/
  declare 
  @where1 varchar(
1000)
  
if len(@Where) = 0
   begin
    
set @where1 = ''
   end
  
else
   begin
    
set @where1 = ' where '+@Where
   end

  
/***写分页sql语句***/
  declare 
  @startnumber 
int,           --开始行数
  @endnumber 
int,           --结束行数
  @sql varchar(
5000)          --分页SQL语句
  
set @startnumber = (@PageCurrent-1)*@PageSize  --根据每行页数和页数设置开始行数
  
set @endnumber = @PageCurrent*@PageSize    --根据每行页数和页数设置结束行数         --主键名
     
  
set @sql = 
  
'select * from (select row_number() over(order by '+
  @keyName
+') row_num,'+
  @FieldShow1
+' from '+
  @tableName
+
  @where1 
+')tablename where row_num > '+
  convert(varchar(
5),@startnumber)+' and row_num <= '+
  convert(varchar(
5),@endnumber)+
  @FieldOrder1       
--设置分页SQL语句
  
  print @sql
  exec (@sql)

  
/***输出参数@PageCount***/
  IF @PageCount IS NULL
   BEGIN
    DECLARE @text nvarchar(
4000)
    SET @text
=N'SELECT @PageCount=COUNT(*) '
     
+N' FROM '+@tableName
     
+N'  '+@where1
    EXEC sp_executesql @text,N
'@PageCount int OUTPUT',@PageCount OUTPUT
    SET @PageCount
=(@PageCount+@PageSize-1)/@PageSize
   END
 commit tran            
--提交事务
    print 
'commited'  
  END TRY                         
  BEGIN CATCH  
    rollback            
--事务回滚
    print 
'rolled back'  
  END CATCH 
go

declare @a 
int
exec proc_Navigation 
'aa',1,8,'','','',@a output
print @a

原文地址:https://www.cnblogs.com/di305449473/p/1239782.html