1、控件代码:

public partial class PagerControl : UserControl {
#region 构造函数 public PagerControl() {
InitializeComponent();
} #endregion #region 分页字段和属性 private int pageIndex = ;
/// <summary>
/// 当前页面
/// </summary>
public virtual int PageIndex {
get { return pageIndex; }
set { pageIndex = value; }
} private int pageSize = ;
/// <summary>
/// 每页记录数
/// </summary>
public virtual int PageSize {
get { return pageSize; }
set { pageSize = value; }
} private int recordCount = ;
/// <summary>
/// 总记录数
/// </summary>
public virtual int RecordCount {
get { return recordCount; }
set { recordCount = value; }
} private int pageCount = ;
/// <summary>
/// 总页数
/// </summary>
public int PageCount {
get {
if (pageSize != ) {
pageCount = GetPageCount();
}
return pageCount;
}
}
/// <summary>
/// 计算总页数
/// </summary>
/// <returns></returns>
private int GetPageCount() {
if (PageSize == ) {
return ;
}
int pageCount = RecordCount / PageSize;
if (RecordCount % PageSize == ) {
pageCount = RecordCount / PageSize;
}
else {
pageCount = RecordCount / PageSize + ;
}
return pageCount;
}
#endregion public 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 == )//有且仅有一页
{
this.MoveFirstItem.Enabled = false;
this.MovePreviousItem.Enabled = false;
this.MoveNextItem.Enabled = false;
this.MoveLastItem.Enabled = false;
}
else if (PageIndex == )//第一页
{
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 = ;
DrawControl(true);
} /// <summary>
/// 上一页
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MovePreviousItem_Click(object sender, EventArgs e) {
PageIndex = Math.Max(, PageIndex - );
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 + );
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 = ;
if (int.TryParse(this.CurrentItem.Text.Trim(), out num) && num > ) {
PageIndex = num;
DrawControl(true);
}
} /// <summary>
/// 跳转页数限制
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void CurrentItem_TextChanged(object sender, EventArgs e) {
int num = ;
if (int.TryParse(this.CurrentItem.Text.Trim(), out num) && num > ) {
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 = ;
if (!int.TryParse(this.PageSizeItem.Text.Trim(), out num) || num <= ) {
num = ;
this.PageSizeItem.Text = "";
}
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()) {
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);
}
}
}

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

winform自定义分页控件的更多相关文章

  1. Winform自定义分页控件的实现

    实现效果 有点丑陋 但是功能是没问题的 测试过 实现思路 先创建一个用户控件 代码实现 public partial class PagerControl : UserControl { ; /// ...

  2. winform 自定义分页控件 及DataGridview数据绑定

    分页效果如上图所示,用到的控件均为基本控件 ,其方法如下 右击项目-添加-新建项 选择用户控件 然后在用户控件中拖入所需要的Label,Button,Text 用户控件全部代码: using Syst ...

  3. C# DataGridView自定义分页控件

    好些日子不仔细写C#代码了,现在主要是Java项目,C#.Net相关项目不多了,有点手生了,以下代码不足之处望各位提出建议和批评. 近日闲来无事想研究一下自定义控件,虽然之前也看过,那也仅限于皮毛,粗 ...

  4. asp.net webform 自定义分页控件

    做web开发一直用到分页控件,自己也动手实现了个,使用用户自定义控件. 翻页后数据加载使用委托,将具体实现放在在使用分页控件的页面进行注册. 有图有真相,给个直观的认识: 自定义分页控件前台代码: & ...

  5. Mvc自定义分页控件

    MVC开发分页常常使用第三方控件,生成的分页HTML带有版权申明,虽然免费,但是总有的别扭.于是,某日,楼主闲来蛋疼,折腾了个自定义分页控件: 先来展示下效果图: 1>当分页不超过10页的时候, ...

  6. WPF自定义分页控件,样式自定义,简单易用

    WPF自定义分页控件 做了许久伸手党,终于有机会贡献一波,搜索一下WPF分页控件,还是多,但是不太通用,主要就是样式问题,这个WPF很好解决,还有一个就是分页控件嘛,只关心几个数字的变动就行了,把页码 ...

  7. (十二)c#Winform自定义控件-分页控件

    前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. 开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control ...

  8. WPF管理系统自定义分页控件 - WPF特工队内部资料

    最近做一个演示的管理系统项目,需要用到分页控件,在网上找了很多,依然找到与UI模版匹配的,最后干脆自己写一个. 分页控件分析: 1.分页控件分简单显示和复杂显示两种: 2.包含上一页.下一页以及页码明 ...

  9. WPF 自定义分页控件二

    一:添加自定义分页控件,命名为KDataPagerTwo: public class KDataPagerTwo : Control, INotifyPropertyChanged { static ...

随机推荐

  1. AspNet Core使用Mysql一些问题及解决方案

    本文假设的你的AspNet Core 2.2的Web程序通过EntityFrameworkCore连接使用MSSQL数据库,能正常使用. 如何想转为使用Mysql,其实不难. 1.安装Mysql这个简 ...

  2. 剑指offer 栈的压入和弹出

    题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈 ...

  3. SpringBoot 打包成war

    1.修改pom.xml文件 <packaging>war</packaging> <properties> <project.build.sourceEnco ...

  4. LearnOpenGL笔记(2)三角形

    这是学习LearnOpenGL CN教程的笔记,包括我遇到的问题和我的烂笔头.文章名与网站小节对应. ------------------------------------分割线---------- ...

  5. Python渗透测试工具库

    漏洞及渗透练习平台 WebGoat漏洞练习平台: https://github.com/WebGoat/WebGoat webgoat-legacy漏洞练习平台: https://github.com ...

  6. Java 之 Vector 集合

    一.构造方法 Vector():构造一个空向量,使其内部数据数组的大小为 10,其标准容量增量为零. Vector(int initialCapacity) :使用指定的初始容量和等于零的容量增量构造 ...

  7. 《Android开发艺术探索》读书笔记之Activity的生命周期

    两种不同情况下的Activity生命周期 (1)典型情况下的生命周期 指在有用户参与的情况下,Activity所经过的生命周期的改变. (2)异常情况下的生命周期 指Activity被系统回收或者由于 ...

  8. Bash Shell中的特殊位置变量及其应用

    Bash Shell中的特殊位置变量及其应用 众所周知bash shell中有许多特殊的位置变量,灵活使用它们可以更好地发挥Shell脚本的功用. 即位置变量:$1,$2,...来表示,用于让脚本在脚 ...

  9. Java错误体系

    1.Java所有的异常错误都继承与Throwable类,只有继承了Throwable类,才能在异常传递体系中进行. 2.Throwable下有两个重要的子类,Error和Exception Error ...

  10. opencv2配置window

    https://opencv.org/ opencv2 opencv3  opencv4 (现在到4版本) 二值化  图像拉伸 灰度  图像腐蚀 车牌识别 配置:https://blog.csdn.n ...