asp.net自定义分页控件

控件代码:


using  System;
using  System.Data;
using  System.Configuration;
using  System.Web;
using  System.Web.Security;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Web.UI.WebControls.WebParts;
using  System.Web.UI.HtmlControls;
using  System.ComponentModel;
using  System.Collections;

namespace  SmartPager
{
    
          /// <summary>
       
///名称:SmartPager
       /
//版本:2.0
       /
//作者:小青青
       /
//CopyRight:2006 请勿用作商业用途
    
/// </summary>

    [DefaultEvent("PageIndexChanged"), ToolboxData("<{0}:SmartPager runat=server></{0}:SmartPager>")]
    
public class SmartPager : System.Web.UI.WebControls.WebControl, INamingContainer
    
{
        TextBox txtNewPageNumber;
        LinkButton lnkPrev;
        LinkButton lnkNext;
        LinkButton lnkFirst;
        LinkButton lnkLast;
        LinkButton lnkGo;
        Label lblCurrentPage;
        
public delegate void PageChangedEventHandler(Object source, PageChangedEventArgs e);
        
public event PageChangedEventHandler PageIndexChanged;
        
private int _PageSize;
        
private int _CurrentPageIndex;
        
private int _VirtualItemCount;

        
public SmartPager()
            : 
base(HtmlTextWriterTag.Div)
        
{ }

        
protected override void OnInit(EventArgs e)
        
{

            txtNewPageNumber 
= new TextBox();
            lnkPrev 
= new LinkButton();
            lnkNext 
= new LinkButton();
            lnkFirst 
= new LinkButton();
            lnkLast 
= new LinkButton();
            lnkGo 
= new LinkButton();
            lblCurrentPage 
= new Label();
            EnsureChildControls();

        }

        
protected override void CreateChildControls()
        
{

            
this.Controls.Add(lnkFirst);
            
this.Controls.Add(lnkPrev);
            
this.Controls.Add(lblCurrentPage);
            
this.Controls.Add(txtNewPageNumber);
            
this.Controls.Add(lnkGo);
            
this.Controls.Add(lnkNext);
            
this.Controls.Add(lnkLast);


            txtNewPageNumber.Width 
= 20;

            lnkFirst.Attributes.Add(
"title""首页");
            lnkPrev.Attributes.Add(
"title""上一页");
            lnkNext.Attributes.Add(
"title""下一页");
            lnkLast.Attributes.Add(
"title""末页");
            lnkGo.Attributes.Add(
"title""转到");

            lnkFirst.Font.Name 
= "Webdings";
            lnkPrev.Font.Name 
= "Webdings";
            lnkNext.Font.Name 
= "Webdings";
            lnkLast.Font.Name 
= "Webdings";
            lnkGo.Font.Name 
= "Webdings";

            lnkPrev.Text 
= "7";
            lnkFirst.Text 
= "9";
            lnkNext.Text 
= "8";
            lnkLast.Text 
= ":";
            lnkGo.Text 
= "4";


            lnkGo.Click 
+= new EventHandler(lnkGo_Click);
            lnkPrev.Click 
+= new EventHandler(lnkPrev_Click);
            lnkNext.Click 
+= new EventHandler(lnkNext_Click);
            lnkFirst.Click 
+= new EventHandler(lnkFirst_Click);
            lnkLast.Click 
+= new EventHandler(lnkLast_Click);

            
base.CreateChildControls();


        }

        [Browsable(
false)]

        
public int PageCount
        
{

            
get
            
{

                
try
                
{

                    
if (VirtualItemCount % PageSize > 0)
                    
{

                        
return VirtualItemCount / PageSize + 1;

                    }

                    
else
                    
{

                        
return VirtualItemCount / PageSize;

                    }

                }

                
catch
                
{
                    
return 0;
                }

            }



        }

        
public void SetPage(int pageIndex)
        
{

            CurrentPageIndex 
= pageIndex;

            
if (pageIndex > PageCount || pageIndex < 0)

                
return;

            
else
            
{

                OnPageIndexChanged(
nullnew PageChangedEventArgs(null, pageIndex));

            }

        }

        
public void SetPage(int pageIndex, int pageSize, int virtualItemCount)
        
{

            _CurrentPageIndex 
= pageIndex;

            _PageSize 
= pageSize;

            _VirtualItemCount 
= virtualItemCount;

            
if (pageIndex > PageCount || pageIndex < 0)

                
return;

            
else
            
{

                OnPageIndexChanged(
nullnew PageChangedEventArgs(null, pageIndex));


            }

        }

        [Browsable(
false)]
        
public int PageSize
        
{

            
get
            
{

                
return _PageSize;

            }

            
set
            
{


                _PageSize 
= value;
                ViewState.SetItemDirty(
"PageSize"true);


            }


        }

        [Browsable(
false)]
        
public int CurrentPageIndex
        
{

            
get
            
{

                
return _CurrentPageIndex;

            }

            
set
            
{


                _CurrentPageIndex 
= value;
                ViewState.SetItemDirty(
"CurrentPageIndex"true);



            }


        }

        [Browsable(
false)]
        
public int VirtualItemCount
        
{

            
get
            
{

                
return _VirtualItemCount;

            }

            
set
            
{


                _VirtualItemCount 
= value;
                ViewState.SetItemDirty(
"VirtualItemCount"true);


            }


        }


        
private void lnkGo_Click(object sender, EventArgs e)
        
{

            
int newPage;

            
try
            
{
                newPage 
= int.Parse(txtNewPageNumber.Text.Trim()) - 1;
            }

            
catch
            
{

                
return;

            }


            
if (PageCount > newPage && PageCount != 0)
                OnPageIndexChanged(
thisnew PageChangedEventArgs(sender, newPage));

        }


        
public virtual void OnPageIndexChanged(object source, PageChangedEventArgs e)
        
{

            DateTime start 
= DateTime.Now;

            
if (e.NewPageIndex > PageCount || e.NewPageIndex < 0)

                
return;

            
else
            
{

                CurrentPageIndex 
= e.NewPageIndex;

                
if (PageIndexChanged != null)
                
{

                    PageIndexChanged(source, e);


                }


                DateTime end 
= DateTime.Now;

                lblCurrentPage.Text 
= String.Format("(当前在第<B>&nbsp;{0}&nbsp;</B>页 共<B>&nbsp;{1}&nbsp;</B>页 记录数<B>&nbsp;{2}&nbsp;</B>条&nbsp;[搜索用时 {3}秒])", (CurrentPageIndex + 1), PageCount, VirtualItemCount, (end - start).TotalSeconds);

                txtNewPageNumber.Text 
= (CurrentPageIndex + 1).ToString();


            }


        }


        
private void lnkPrev_Click(object sender, EventArgs e)
        
{

            
int newPage;

            newPage 
= CurrentPageIndex - 1;
            
if (newPage >= 0 && PageCount != 0)
                OnPageIndexChanged(
thisnew PageChangedEventArgs(sender, newPage));

        }

        
private void lnkFirst_Click(object sender, EventArgs e)
        
{

            
int newPage;

            newPage 
= 0;
            
if (newPage >= 0 && PageCount != 0)
                OnPageIndexChanged(
thisnew PageChangedEventArgs(sender, newPage));

        }

        
private void lnkLast_Click(object sender, EventArgs e)
        
{

            
int newPage;

            newPage 
= PageCount - 1;
            
if (PageCount > newPage && PageCount != 0)
                OnPageIndexChanged(
thisnew PageChangedEventArgs(sender, newPage));

        }


        
private void lnkNext_Click(object sender, EventArgs e)
        
{

            
int newPage;

            newPage 
= CurrentPageIndex + 1;
            
if (PageCount > newPage && PageCount != 0)
                OnPageIndexChanged(
thisnew PageChangedEventArgs(sender, newPage));

        }



        
protected override object SaveViewState()
        
{
            
// Check whether the PageSize property exists in 
            
// the ViewState property, and if it does, check
            
// whether it has changed since the most recent
            
// TrackViewState method call.
            if (!((IDictionary)ViewState).Contains("PageSize"|| ViewState.IsItemDirty("PageSize"))
            
{
                ViewState.Remove(
"PageSize");
                
// Add the _PageSize property to the StateBag.
                ViewState.Add("PageSize", _PageSize);
            }

            
if (!((IDictionary)ViewState).Contains("CurrentPageIndex"|| ViewState.IsItemDirty("CurrentPageIndex"))
            
{
                ViewState.Remove(
"CurrentPageIndex");
                
// Add the _CurrentPageIndex property to the StateBag.
                ViewState.Add("CurrentPageIndex", _CurrentPageIndex);
            }

            
if (!((IDictionary)ViewState).Contains("VirtualItemCount"|| ViewState.IsItemDirty("VirtualItemCount"))
            
{
                ViewState.Remove(
"VirtualItemCount");
                
// Add the _VirtualItemCount property to the StateBag.
                ViewState.Add("VirtualItemCount", _VirtualItemCount);
            }

            
return ((IStateManager)ViewState).SaveViewState();
        }

        
protected override void LoadViewState(object savedState)
        
{
            
if (savedState != null)
                ((IStateManager)ViewState).LoadViewState(savedState);
            
if (ViewState["CurrentPageIndex"!= null)
                _CurrentPageIndex 
= int.Parse(ViewState["CurrentPageIndex"].ToString());
            
if (ViewState["PageSize"!= null)
                _PageSize 
= int.Parse(ViewState["PageSize"].ToString());
            
if (ViewState["VirtualItemCount"!= null)
                _VirtualItemCount 
= int.Parse(ViewState["VirtualItemCount"].ToString());

        }


        
public class PageChangedEventArgs : EventArgs
        
{
            
            
// Fields
            private object commandSource;
            
private int newPageIndex;

            
public PageChangedEventArgs(object commandSource, int newPageIndex)
            
{
                
this.commandSource = commandSource;
                
this.newPageIndex = newPageIndex;
            }

            
// Properties
            public object CommandSource
            
{
                
get
                
{
                    
return this.commandSource;
                }

            }

            
public int NewPageIndex
            
{
                
get
                
{
                    
return this.newPageIndex;
                }

            }

        
        }


    }


}


 

  •  通过后台,使用SmartPager转向页面

 

int  goToPageIndex  =   0 ; // 转向的页码,索引从0开始,0代表第一页
int  pageSize  =   int .Parse(ConfigurationManager.AppSettings[ " PageSize " ]);
int  virtualItemCount  =  GetData(); // 从数据库中得到要查询的记录总数
pager.SetPage(goToPageIndex , pageSize, virtualItemCount );

// 如果试图转向到一个超过最大页面索引的页面,它将不会抛出异常。结果为无效操作!

 

  •  订阅事件PageIndexChanged

 

protected   void  pager_PageIndexChanged( object  source, SmartPager.PageChangedEventArgs e)
        
{

            
//绑定数据源,数据容器可以为GridView,DataGrid等
           
//为了提高数据库效率,后台应使用带有StartRecord和MaxRecords参数的方法
            string searchKey=null;//查询关键字

            gvItem.DataSource 
= GetDataList(searchKey,e.NewPageIndex * pageSize, pageSize);//根据业务需要自定义的获取数据的方法

            gvItem.DataBind();


        }

http://blog.csdn.net/justinalucard/archive/2006/12/22/1453194.aspx

 转载请注明本贴地址及作者!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值