一个自认为貌似Baidu,Google的翻页导航控件

    呵呵!今天午觉没睡好,感觉太热了,睡了一下子就热醒了,同事们都不吹空调了,没办法!
现在已经是上班时间了,但一点也不想做事,再加上没睡好,头晕晕的,跑到洗手间用冷水洗
一把脸,回到办公桌前,就想到先写篇BLOG吧,昨天写了一个分页控件,把它写到自己的BLOG
上去,呵呵!其实这个控件之前是我同事写的,昨天闲得无聊,就想到把同事那个控件改进一下
吧,我觉得搞得太复杂了(按钮太多、、、,我自认为不需要那些东东)
  我同事把这个控件称之为“无源虚拟分页控件”因为它是不需要数据源的,只起到虚拟选择页
号与定位的作用,只需要指定其TotalRecord(记录总数)就可以帮你虚拟分页了.
  控件的按钮支持文字和图片俩种格式,可以设定其版页最大显示数,每页显示记录数,以及鼠标
放在按钮上的提示信息.
  由于是无源虚拟分页,所以控件必须给定TotalRecord(记录总数)以及实现ChangePageClick事件
那么记录的总数怎么出来呢,那当然是通过存储过程来取得了,这个存储过程必须是每次取得的数据
是当前展示所需要的(也就是说取当前页的记录),如果一股脑儿把所有满足条件的数据全取出来
那根本就没有意义了,所以呢,要实现分页这个存储过程也是很重要的。
  下面是我做DEMO的存储过程

set  ANSI_NULLS  ON
set  QUOTED_IDENTIFIER  ON
go

--  =============================================
--
 Author:        <不懂>
--
 Create date: <2006-11-8>
--
 Description:    <分页存储过程>
--
 =============================================
ALTER   PROCEDURE   [ dbo ] . [ P_PageRecord ]
(
@intPageSize   int = 10 , @intPageNum   int = 1 , @strWhere   nvarchar ( 200 ))
AS
BEGIN
    
SET  NOCOUNT  ON ;

    
if ( @intPageSize < 2   or   @intPageSize > 100 )
        
set   @intPageSize = 10
    
if ( @intPageNum < 1 )
        
set   @intPageNum = 1 ;
    
WITH  Search(OrderID,CustomerID,EmployeeID,OrderDate,RequiredDate,ShippedDate , ShipVia ,Freight ,ShipName,RowNum)
           
as
              (
              
select  OrderID ,
                     CustomerID,
                     EmployeeID ,
                     OrderDate,
                     RequiredDate,
                     ShippedDate ,
                     ShipVia ,
                     Freight ,
                     ShipName,
                     ROW_NUMBER() 
over  ( order   by  OrderID  DESC as  RowNum
              
from  Orders  where  ShipAddress  like  N ' % ' + @strWhere + N ' % '
              )

    
SELECT  OrderID,CustomerID,EmployeeID,OrderDate,RequiredDate,ShippedDate , ShipVia ,Freight ,ShipName,( select   count ( * from  Search)  as  Rows  from  Search
    
where  RowNum > @intPageSize * ( @intPageNum - 1 and  RowNum <= @intPageSize * @intPageNum
   
SET  NOCOUNT  OFF ;
   
return   @@ERROR
END


   这个分页控件是个完全自定义的控件没有UI的,继承于WebControl,为了响应事件还得继承IPostBackEventHandler,下面就是完整的实现代码。

 

using  System;
using  System.Collections.Generic;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Web.UI.HtmlControls;
using  System.ComponentModel;
using  System.Text;

[assembly: TagPrefix(
" SmbComponent " , " BG " )]
namespace  SmbComponent
{
    
/// <summary>
    
/// 作者:不懂
    
/// 日期:2006-11-8
    
/// </summary>

    [DefaultProperty("TotalRecord"), DefaultEvent("ChangePageClick"), ToolboxData("<{0}:PageList runat=server></{0}:PageList>")]
    
public class PageList:WebControl,IPostBackEventHandler
    
{
        
公用变量

        
导航图片路径及相关变量

        
枚举

        
属性

        
定义事件

        
构造涵数

        
重写的方法

        
私有方法

    }

}

你可能感兴趣的:(Google)