ASP.NET自定义分页控件

这次开发的CRM中有许多地方都使用到了ASP.NET中的GridView控件,这个控件的功能其实都是很全的,但是此次开发中不允许使用控件自带的分页,而是要求开发人员自己写。由于自己写的分页代码比较多,且项目中使用的GridView控件也是很多,为了偷懒+减少代码量…于是昨天晚上花了点时间做了这么个自定义WEB用户控件,写的时候也遇到了些问题,不过随着逐步的分析都逐一解决了,以下是该控件的源码。

 
  1. using System;
  2. using System.Data;
  3. using System.Configuration;
  4. using System.Collections;
  5. using System.Web;
  6. using System.Web.Security;
  7. using System.Web.UI;
  8. using System.Web.UI.WebControls;
  9. using System.Web.UI.WebControls.WebParts;
  10. using System.Web.UI.HtmlControls;
  11. using System.Collections.Generic;
  12.  
  13. /**
  14.  * 功能:对GridView数据分页
  15.  * 作者:Neeke
  16.  * 版权所有:尼克技术博客 http://www.ineeke.com
  17.  * */
  18. public partial class WebUserControl : System.Web.UI.UserControl
  19. {
  20.     PagedDataSource pds = new PagedDataSource();
  21.     //待分页的数据源
  22.     public IEnumerable DataSource;
  23.     //每页显示数据条数
  24.     public int pageSize = 10;
  25.     //待分页显示的GridView对象
  26.     public GridView PageGridView;
  27.     //当前页
  28.     public int CurrentPage
  29.     {
  30.         get { return (Int32)ViewState["CurrentPage"]; }
  31.         set { ViewState["CurrentPage"] = value; }
  32.     }
  33.     //分页个数
  34.     public int Count
  35.     {
  36.         get { return (Int32)ViewState["Count"]; }
  37.         set { ViewState["Count"] = value; }
  38.     }
  39.  
  40.     //数据绑定
  41.     public void PageDataBind()
  42.     {
  43.         if (!IsPostBack)
  44.         {
  45.             CurrentPage = 0;
  46.             Count = 0;
  47.         }
  48.         //用于判断是否越界
  49.         if (CurrentPage > Count || CurrentPage < 0)
  50.         {
  51.             return;
  52.         }
  53.         try
  54.         {
  55.             pds.DataSource = DataSource;
  56.             pds.AllowPaging = true;
  57.             pds.PageSize = pageSize;
  58.             pds.CurrentPageIndex = CurrentPage;
  59.             Count = pds.PageCount;
  60.             this.lblTotalCount.Text = pds.DataSourceCount.ToString();
  61.             this.lblPageSize.Text = pageSize.ToString();
  62.             this.lblCurrentPage.Text&nbs
    p;= Convert.ToString(CurrentPage + 1);
  63.             this.lblTotalPage.Text = Convert.ToString(Count);
  64.             PageGridView.DataSource = pds;
  65.             PageGridView.DataBind();
  66.         }
  67.         catch (Exception ex)
  68.         {
  69.             Response.Write("<script>alert(‘没有您输入的页!’);</script>");
  70.         }
  71.     }
  72.     //第一页按钮按下时触发
  73.     protected void LinkFirst_Click(object sender, EventArgs e)
  74.     {
  75.         CurrentPage = 0;
  76.         PageDataBind();
  77.     }
  78.     //前一页按钮按下时触发
  79.     protected void LinkPrie_Click(object sender, EventArgs e)
  80.     {
  81.         if (CurrentPage <= 0)
  82.         {
  83.             CurrentPage = 0;
  84.         }
  85.         else
  86.         {
  87.             CurrentPage = CurrentPage-1;
  88.         }
  89.         PageDataBind();
  90.     }
  91.     //下一页按钮按下时触发
  92.     protected void LinkNext_Click(object sender, EventArgs e)
  93.     {
  94.         if (CurrentPage >= (Count - 1))
  95.         {
  96.             CurrentPage = Count - 1;
  97.         }
  98.         else
  99.         {
  100.             CurrentPage=CurrentPage+1;
  101.         }
  102.         PageDataBind();
  103.     }
  104.     //最后一页按钮按下时触发
  105.     protected void LinkLast_Click(object sender, EventArgs e)
  106.     {
  107.         CurrentPage = Count - 1;
  108.         PageDataBind();
  109.     }
  110.     //GO按钮按下时触发
  111.     protected void btnGo_Click(object sender, EventArgs e)
  112.     {
  113.         CurrentPage = int.Parse(this.txtGoPage.Text)-1;
  114.         PageDataBind();
  115.     }
  116. }

使用方法:
1.将此控件拖入到网页中。
2.在该网页的Page_Load()事件中写入如下代码。

 
  1. protected void Page_Load(object sender, EventArgs e)
  2.     {
  3.         this.WebUserControl1.DataSource = SaleChanceManager.GetChanceAll();//设置待数据源
  4.         this.WebUserControl1.pageSize = 5;//设置每页数据条数
  5.         this.WebUserControl1.PageGridView = this.GridView1;//设置待分页的GridView
  6.         this.WebUserControl1.PageDataBind();//调用绑定方法
  7.     }

除非另有声明,本站遵循【署名-非商业性使用-相同方式共享 3.0 共享协议】授权。

转载原创文章请注明,转载自:Neeke[http://www.ineeke.com]

本文链接: http://www.ineeke.com/archives/AspDotNetZiDingYiFenYeKongJian/

2008年11月15日 | 归档于 ASP.NET | 5 条评论
  1. neeke
    2009年2月25日 23:31 | #1

    O(∩_∩)O哈哈~ 任何事物都有两面性嘛。

  2. 2009年2月24日 22:33 | #2

    其实可以写很多的自定义控件,以便以后用着方便。
    比如我自己就经常写写DLL文件,做ASP.NET项目时直接引用进来,然后直接就点出来了,操作数据库自动MD5加密截取字符串,还能固定截取长度,位置。什么的,废点劲写个比较全面的DLL文件,以后用的闲荡方便,但是我现在自己写的程序就算给了别人,他们也看不懂:(主要自己定义的DLL太多了。。。。

  3. 2008年11月16日 23:36 | #3

    语法真像java,不仔细看都以为是java的“儿子”。

    Gravatar头像neeke 于 2008-11-17 20:03:05 回复

    本来就是互相抄袭的。

  4. 2008年11月16日 17:53 | #4

    解析的很详细哦!呵呵,如果是ASP的就好了!刚开始学asp不久!

    Gravatar头像neeke 于 2008-11-16 19:17:13 回复

    Haha马马虎虎了。

  5. 2008年11月16日 11:13 | #5

    帅~O(∩_∩)O~

    Gravatar头像neeke 于 2008-11-16 19:16:45 回复

    哦…也…

发表评论

XHTML: 您可以使用这些标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">
n:-zy n:-zr n:-zan n:-xf n:-wx n:-tz n:-tt n:-ts n:-sy n:-st n:-ss n:-sk n:-qd n:-pz n:-lh n:-kun n:-ku n:-hx n:-hd n:-gt n:-gg n:-bz

NOTICE: You should type some Chinese word (like “你好”) in your comment to pass the spam-check, thanks for your patience!