初学--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

你可能感兴趣的:(asp.net)