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. 2019-11-29-C#-直接创建多个类和使用反射创建类的性能

    原文:2019-11-29-C#-直接创建多个类和使用反射创建类的性能 title author date CreateTime categories C# 直接创建多个类和使用反射创建类的性能 li ...

  2. validateField方法对部分表单字段进行校验

    原文:https://blog.csdn.net/qq_37782076/article/details/85123602 代码 <template> <div class=&quo ...

  3. Java 关于函数式接口与Lambda表达式之间的关系

    java是一种面向对象的语言,java中的一切都是对象,即数组,每个类创建的实例也是对象.在java中定义的函数或方法不可能完全独立,也不能将方法函数作为参数或返回值给实例. 在java7及以前,我们 ...

  4. android studio学习----通过github的URL怎么导入新的工程

    这一切的前提是你装了git,有了github帐号,之后就很简单,但是导入之后交给android studio 也会发生各种编译错误,这个时候就需要自己去一一解决了,主要还是  引用依赖版本的问题 第一 ...

  5. Spark调用Linux命令实现解压和压缩功能

    一.应用场景 在Spark程序中调用Linux命令,实现一些程序难以实现的功能,例如:发送模拟邮件.文件打包或解压等等 二.代码实现 package big.data.analyse.linux im ...

  6. nginx无网络启动失败——proxy_pass域名DNS解析出错

    问题: nginx启动或者reload的时候,会对proxy_pass后面的域名进行DNS解析,如果解析失败,启动就会失败或者reload失败. 我们是to B的产品,客户的环境可能是不通公网的,因此 ...

  7. ASP.NET----内置对象----Response

    Response对象是HttpResponse类的实例,它代表Web服务器对客户端请求的响应,包含如下功能: ①重定向:  ②设置页面输出内容 (可以向客户端浏览器发送信息,或者将访问转移到另一个网址 ...

  8. Django框架(六)--模板层:变量、过滤器、标签、自定义标签和过滤器

    将页面的设计和Python的代码分离开会更干净简洁更容易维护. 我们可以使用 Django的 模板系统 (Template System)来实现这种模式 # django模板修改的视图函数 def c ...

  9. MySQL复制技术

    MySQL高可用方案 投票选举机制,较复杂 MySQL本身没有提供replication failover的解决方案,自动切换需要依赖MHA脚本 可以有多台从库,从库可以做报表和备份 MySQL复制技 ...

  10. Makefile 基础语法

    1.. specify the directores , i not specified , search current directory put every folder into a list ...