1、控件代码:

public partial class PagerControl : UserControl {#region 构造函数public PagerControl() {InitializeComponent();}#endregion#region 分页字段和属性private int pageIndex = 1;/// <summary>/// 当前页面/// </summary>public virtual int PageIndex {get { return pageIndex; }set { pageIndex = value; }}private int pageSize = 1;/// <summary>/// 每页记录数/// </summary>public virtual int PageSize {get { return pageSize; }set { pageSize = value; }}private int recordCount = 0;/// <summary>/// 总记录数/// </summary>public virtual int RecordCount {get { return recordCount; }set { recordCount = value; }}private int pageCount = 0;/// <summary>/// 总页数/// </summary>public int PageCount {get {if (pageSize != 0) {pageCount = GetPageCount();}return pageCount;}}/// <summary>/// 计算总页数/// </summary>/// <returns></returns>private int GetPageCount() {if (PageSize == 0) {return 0;}int pageCount = RecordCount / PageSize;if (RecordCount % PageSize == 0) {pageCount = RecordCount / PageSize;}else {pageCount = RecordCount / PageSize + 1;}return pageCount;}#endregionpublic event EventHandler OnPageChanged;/// <summary>/// 外部调用/// </summary>public void DrawControl(int count) {recordCount = count;DrawControl(false);}/// <summary>/// 页面控件呈现/// </summary>private void DrawControl(bool callEvent) {this.GoItem.Text = "跳转";this.CurrentItem.Text = PageIndex.ToString();this.TolCountItem.Text = RecordCount.ToString();this.PageSizeItem.Text = PageSize.ToString();if (callEvent && OnPageChanged != null) {OnPageChanged(this, null);//当前分页数字改变时,触发委托事件
            }SetFormCtrEnabled();if (PageCount == 1)//有且仅有一页
            {this.MoveFirstItem.Enabled = false;this.MovePreviousItem.Enabled = false;this.MoveNextItem.Enabled = false;this.MoveLastItem.Enabled = false;}else if (PageIndex == 1)//第一页
            {this.MoveFirstItem.Enabled = false;this.MovePreviousItem.Enabled = false;}else if (PageIndex == PageCount)//最后一页
            {this.MoveNextItem.Enabled = false;this.MoveLastItem.Enabled = false;}}/// <summary>/// 设置控件可用性/// </summary>private void SetFormCtrEnabled() {this.CurrentItem.Enabled = true;this.MoveFirstItem.Enabled = true;this.MovePreviousItem.Enabled = true;this.MoveNextItem.Enabled = true;this.MoveLastItem.Enabled = true;this.GoItem.Enabled = true;}/// <summary>/// 首页/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void MoveFirstItem_Click(object sender, EventArgs e) {PageIndex = 1;DrawControl(true);}/// <summary>/// 上一页/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void MovePreviousItem_Click(object sender, EventArgs e) {PageIndex = Math.Max(1, PageIndex - 1);DrawControl(true);}/// <summary>/// 下一页/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void MoveNextItem_Click(object sender, EventArgs e) {PageIndex = Math.Min(PageCount, PageIndex + 1);DrawControl(true);}/// <summary>/// 末页/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void MoveLastItem_Click(object sender, EventArgs e) {PageIndex = PageCount;DrawControl(true);}/// <summary>/// 跳转/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void GoItem_Click(object sender, EventArgs e) {int num = 0;if (int.TryParse(this.CurrentItem.Text.Trim(), out num) && num > 0) {PageIndex = num;DrawControl(true);}}/// <summary>/// 跳转页数限制/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void CurrentItem_TextChanged(object sender, EventArgs e) {int num = 0;if (int.TryParse(this.CurrentItem.Text.Trim(), out num) && num > 0) {if (num > PageCount) {this.CurrentItem.Text = PageCount.ToString();}}}/// <summary>/// 页数Enter键/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void CurrentItem_KeyPress(object sender, KeyPressEventArgs e) {GoItem_Click(null, null);}private bool isTextChanged = false;/// <summary>/// 页数改变事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void PageSizeItem_TextChanged(object sender, EventArgs e) {int num = 0;if (!int.TryParse(this.PageSizeItem.Text.Trim(), out num) || num <= 0) {num = 20;this.PageSizeItem.Text = "20";}else {isTextChanged = true;}pageSize = num;}/// <summary>/// 页数Enter事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void PageSizeItem_KeyPress(object sender, KeyPressEventArgs e) {if (e.KeyChar == System.Convert.ToChar(13)) {if (isTextChanged) {isTextChanged = false;MoveFirstItem_Click(null, null);}}}} 

2、调用代码:

        /// <summary>/// 加载数据/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void SelectForm_Load(object sender, EventArgs e) {LoadData();pagerControl1.OnPageChanged += new EventHandler(pagerControl1_OnPageChanged);}/// <summary>/// 分页控件改变事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>void pagerControl1_OnPageChanged(object sender, EventArgs e) {LoadData();}/// <summary>/// 加载数据    /// </summary>/// <param name="index"></param>/// <param name="pagesize"></param>private void LoadData() {List<Template> templateList = new List<Template>();HttpHelper http = new HttpHelper();string url = string.Format("https://www.baidu.com?page={0}&pagecount={1}", this.pagerControl1.PageIndex, this.pagerControl1.PageSize);string result = http.CollectHtml(url, "", HttpHelper.Method.GET, HttpHelper.HtmlEncoding.UTF8, HttpHelper.HtmlEncoding.UTF8);var resultData = JsonConvert.DeserializeObject<JObject>(result);//分页信息if (resultData["flipinfo"] != null) {Page page = JsonConvert.DeserializeObject<Page>(resultData["flipinfo"].ToString());if (page != null) {pagerControl1.DrawControl(page.total);}}}

  以上是实际项目中使用的代码,供大家参考。

转载于:https://www.cnblogs.com/len0031/p/11273462.html

winform自定义分页控件相关推荐

  1. 也发一个自定义分页控件

    分页控件有页面选择10 20 50显示,跳转到第几页,上页,下页功能.如图 代码为: using System; using System.Web.UI; using System.Web.UI.We ...

  2. .net 服务器端自定义分页控件 简单示例

    使用效果如图: 先将控件添加到工具箱 将控件拖入到页面 会自动生成如下代码 <pager:pager ID="Pager1" runat="server" ...

  3. 适用于ASP.NET的自定义分页控件

    前段时间的项目中需要使用到分页控件,在网上找了不少,最终还是自己动手写一个,比较简单,后续功能以后再实现,现把代码及思路写下来,望大家批评指正.分页控件的分页形式大多分三种,一种是用URL传值,通过给 ...

  4. QT 自定义分页控件

    Qt 自定义页码控件 一.效果展示 二.头文件 #ifndef PAGECONTROL_H #define PAGECONTROL_H #include <QList> #include ...

  5. 妹子UI之自定义分页控件

    妹子UI,http://amazeui.org,在这儿顺便帮他打下广告,我个人觉得比Bootstrap漂亮,于是,我就选择了基于它的UI写出来自己的分页控件. paginator.js的内容如下: ( ...

  6. C#自定义用户控件之分页

    形形色色的分页控件很多,有些可满足我们的要求,但有些却不一定,下面是我在工作当中遇到的问题而随手写了个能满足某些功能的自定义分页控件: 控件源代码: <%@ Control Language=& ...

  7. Winform分页控件之纯分页显示处理

    在之前介绍的Winform分页控件中,都以分页控件+显示表格控件作为一个整体性的控件,不可分开,这样做的目的是可以实现更多的操作,集成更多丰富的特性,减少我们开发的工作量,这种情况虽然适用于大多数的情 ...

  8. [置顶] 分步实现具有分页功能的自定义DataList控件【附源代码】

    一.控件也是类 [效果] [操作步骤] 1.  新建网站Web 2.  添加类CustomDataList.cs(系统会提示你把类建在App_Code文件夹中),代码如下: using System; ...

  9. 猛犸Winform分页控件

    本Winform分页控件不于具体的数据源相关联,可随时设置每页显示记录行数和页码,简单实用,如下图 下载地址:http://download.csdn.net/detail/shunlu/808974 ...

最新文章

  1. vue无缝滚动的插件开发填坑分享
  2. 腾讯服务器“上天”、大疆云台会飞、淘宝被掰弯了……这是昨天各大科技公司的最新产品...
  3. req.xhr在express中的应用
  4. Java对存储过程的调用方法
  5. 【数学和算法】初识卡尔曼滤波器(一)
  6. java statement 返回类型,6.3 返回类型和返回语句 | Return type Return statement
  7. Java 虚拟机运行时数据区
  8. c语言程序设计 高等教育,[高等教育]c语言程序设计.doc
  9. Navicate在同步oracle数据,不同数据库之间同步
  10. bugku-管理员登录-(X-forwarded-for)
  11. git commit或pull后恢复到原来版本
  12. 看漫画学python 豆瓣_CAD图纸查看器
  13. python爬虫:Scrapy框架爬取纳斯达克(NASDAQ)股票数据
  14. [JAVA冷知识]什么是逆变(contravariant)与协变(covariant)?数组是否支持协变逆变?泛型呢?
  15. 国内哪里培训python比较好-最好的Python培训机构是哪家?
  16. python给女朋友_Python 给女朋友道歉的一天
  17. 前端学习从入门到高级全程记录之13 (京东项目一)
  18. NCTF2020 web 你就是我的master吗
  19. sql中查询最近一条记录
  20. 象形文字--中文自然语言理解的突破

热门文章

  1. delphi 发送网络消息_Actor 消息的可靠交付(Akka Typed)
  2. mysql5.7.21压缩版_mysql5.7.21解压版安装配置图文
  3. python的requests库安装失败_robot framework-requests库安装过程问题解决
  4. Android tv开发px,【Android】TV端项目开发挖坑总结
  5. vue引入如何使用不同字体
  6. Mysql Workbench中EER Diagram逆向生成表
  7. springboot 使用mybatis-plus 配置乐观锁
  8. RabbitMQ消费端自定义监听器DefaultConsumer
  9. 深入理解 MVC 中的 M 与 C
  10. Spring零配置之@Configuration注解详解。