zoukankan      html  css  js  c++  java
  • 一步步打造自己的分页控件2

    上一篇中我将分页的代码写在用户控件里面,仔细一想,发现分页无非是改变当前页码,获取不同的数据

    所以点击分页事件都是同一个,因此想到了使用委托,绑定多个类似的事件,对上面的代码进行优化

    前台代码

    View Code
    1 <div id="pager">
    2        第<asp:Label ID="curPage" runat="server" Text="1"></asp:Label>页&nbsp;&nbsp;
    3         <asp:LinkButton ID="lbtfirst" runat="server" onclick="lbtfirst_Click">首页</asp:LinkButton>&nbsp; &nbsp;   
    4         <asp:LinkButton ID="lbtPre" runat="server" onclick="lbtPre_Click">上页</asp:LinkButton>&nbsp; &nbsp;  
    5         <asp:LinkButton
    6             ID="lbtNext" runat="server" onclick="lbtNext_Click">下页</asp:LinkButton>&nbsp; &nbsp;  
    7             <asp:LinkButton ID="lblLast"
    8                 runat="server" onclick="lblLast_Click">末页</asp:LinkButton>&nbsp; &nbsp;  
    9     </div>  

    后台分页代码没有具体实现分页,没有设置数据源,数据绑定控件参数

    View Code
     1 using System;
     2 
     3 namespace Pager.controls
     4 {
     5     public delegate void pageChangedHandler(object sender, int nPageIndex);
     6     public partial class pager3 : System.Web.UI.UserControl
     7     {
     8         public event pageChangedHandler OnPageChange;
     9         protected void Page_Load(object sender, EventArgs e)
    10         {
    11             if (!IsPostBack)
    12             {
    13                 state();
    14             }
    15         }
    16         #region 属性
    17 
    18         int pageCount = 10;
    19         /// <summary>
    20         /// 每页数量
    21         /// </summary>
    22         public int PageCount
    23         {
    24             get { return pageCount; }
    25             set { pageCount = value; }
    26         }
    27         int pagelist = 1;
    28         /// <summary>
    29         /// 页数
    30         /// </summary>
    31         public int Pagelist
    32         {
    33             get { return pagelist; }
    34             set { pagelist = value; }
    35         }     
    36 
    37         private void state()
    38         {
    39             if ( this.curPage.Text=="1")
    40             {
    41                 lbtfirst.Enabled = false;
    42                 lbtPre.Enabled = false;
    43                 lbtNext.Enabled = true;
    44                 lblLast.Enabled = true;
    45             }
    46             if (int.Parse(this.curPage.Text) > 1 && int.Parse(this.curPage.Text) < Pagelist)
    47             {
    48                 lbtfirst.Enabled = true;
    49                 lbtPre.Enabled = true;
    50                 lbtNext.Enabled = true;
    51                 lblLast.Enabled = true;
    52             }
    53             if (int.Parse(this.curPage.Text) == Pagelist)
    54             {
    55                 lbtfirst.Enabled = true;
    56                 lbtPre.Enabled = true;
    57                 lbtNext.Enabled = false;
    58                 lblLast.Enabled = false;
    59             }
    60         }
    61 
    62         #endregion     
    63 
    64         #region 点击分页事件
    65         //第一页
    66         protected void lbtfirst_Click(object sender, EventArgs e)
    67         {
    68             this.curPage.Text = "1";
    69             OnPageChange(sender, 1);
    70             state();
    71         }
    72         //上页
    73         protected void lbtPre_Click(object sender, EventArgs e)
    74         {
    75             this.curPage.Text = (int.Parse(this.curPage.Text) - 1).ToString();
    76             OnPageChange(sender, int.Parse(this.curPage.Text));
    77             state();
    78         }
    79         //下页
    80         protected void lbtNext_Click(object sender, EventArgs e)
    81         {
    82 
    83             this.curPage.Text = (int.Parse(this.curPage.Text) + 1).ToString();
    84             OnPageChange(sender, int.Parse(this.curPage.Text));
    85             state();
    86         }
    87         //末页
    88         protected void lblLast_Click(object sender, EventArgs e)
    89         {
    90             this.curPage.Text = Pagelist.ToString();
    91             OnPageChange(sender, int.Parse(this.curPage.Text));
    92             state();
    93         }
    94         #endregion
    95     }
    96 }

    调用的时候只需要触发分页事件,从而获取动态改变的当前页码

    View Code
     1  protected void Page_Load(object sender, EventArgs e)
     2         {
     3             showData(1);
     4             this.pager31.OnPageChange += new controls.pageChangedHandler(pager31_PageIndexChanged);
     5         }
     6         void pager31_PageIndexChanged(object sender, int nPageIndex)
     7         {
     8             showData(nPageIndex);
     9         }
    10 
    11         private void showData(int nPageIndex)
    12         {
    13             pager31.PageCount = 20;
    14             pager31.Pagelist = (new sqlHelper().getAllPage()) / pager31.PageCount;
    15             this.GridView1.DataSource = new sqlHelper().getList(pager31.PageCount, nPageIndex - 1"");
    16             this.GridView1.DataBind();
    17         }

    代码继续在下一篇中提供下载,不好意思让各位博友久等,拍砖头的尽管来

  • 相关阅读:
    用优先级队列实现先进先出队列;
    c#入门经典(第三版) 练习6.8(5)
    请给出一个时间为O(nlgk)、用来将k个已排序链表的算法。此处n为所有输入链表中元素的总数。
    计数排序
    Heap_delete(A,i)操作将结点i中的想从堆A中删去。对含n个元素的最大堆,请给出时间为O(lgn)的HEAPDELETE的实现。
    堆排序
    请给出一个算法,使之对于给定的介于0到k之间的n个整数进行预处理,并能在O(1)时间内,回答出输入的整数中有多少个落在区间[a..b]内,你给出的算法上预处理时间应是O(n+k)。
    sql存储过程传多个id查询,使用in
    SQL使用语句修改列及表名
    泛型约束使用?有些不知道叫什么好!
  • 原文地址:https://www.cnblogs.com/Jaylong/p/feny2.html
Copyright © 2011-2022 走看看