一个自认为貌似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 DESCas 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-1and 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
    
{
        
公用变量

        
导航图片路径及相关变量

        
枚举

        
属性

        
定义事件

        
构造涵数

        
重写的方法

        
私有方法

    }

}

posted on 2006-11-09 14:47  不懂  阅读(1436)  评论(8编辑  收藏  举报

导航