winform自定义分页控件
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自定义分页控件的更多相关文章
- Winform自定义分页控件的实现
实现效果 有点丑陋 但是功能是没问题的 测试过 实现思路 先创建一个用户控件 代码实现 public partial class PagerControl : UserControl { ; /// ...
- winform 自定义分页控件 及DataGridview数据绑定
分页效果如上图所示,用到的控件均为基本控件 ,其方法如下 右击项目-添加-新建项 选择用户控件 然后在用户控件中拖入所需要的Label,Button,Text 用户控件全部代码: using Syst ...
- C# DataGridView自定义分页控件
好些日子不仔细写C#代码了,现在主要是Java项目,C#.Net相关项目不多了,有点手生了,以下代码不足之处望各位提出建议和批评. 近日闲来无事想研究一下自定义控件,虽然之前也看过,那也仅限于皮毛,粗 ...
- asp.net webform 自定义分页控件
做web开发一直用到分页控件,自己也动手实现了个,使用用户自定义控件. 翻页后数据加载使用委托,将具体实现放在在使用分页控件的页面进行注册. 有图有真相,给个直观的认识: 自定义分页控件前台代码: & ...
- Mvc自定义分页控件
MVC开发分页常常使用第三方控件,生成的分页HTML带有版权申明,虽然免费,但是总有的别扭.于是,某日,楼主闲来蛋疼,折腾了个自定义分页控件: 先来展示下效果图: 1>当分页不超过10页的时候, ...
- WPF自定义分页控件,样式自定义,简单易用
WPF自定义分页控件 做了许久伸手党,终于有机会贡献一波,搜索一下WPF分页控件,还是多,但是不太通用,主要就是样式问题,这个WPF很好解决,还有一个就是分页控件嘛,只关心几个数字的变动就行了,把页码 ...
- (十二)c#Winform自定义控件-分页控件
前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. 开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control ...
- WPF管理系统自定义分页控件 - WPF特工队内部资料
最近做一个演示的管理系统项目,需要用到分页控件,在网上找了很多,依然找到与UI模版匹配的,最后干脆自己写一个. 分页控件分析: 1.分页控件分简单显示和复杂显示两种: 2.包含上一页.下一页以及页码明 ...
- WPF 自定义分页控件二
一:添加自定义分页控件,命名为KDataPagerTwo: public class KDataPagerTwo : Control, INotifyPropertyChanged { static ...
随机推荐
- c# 类实例序列化反序列化json文件 (原发布 csdn 2017-10-01 20:02:12)
前言 前段时间使用了net.json保存对象数据.添加完成后,测试发现300多实例数据保存加载json文件,速度比原方式(BinaryFormatter)慢.但是功能加上后也懒再删掉代码了,索性就采用 ...
- 匿名方法是怎样演变到Lambda表达试过程
一. "Lambda 表达式"(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda ab ...
- C#/.Net操作MongoDBHelper类
先 NuGet两个程序集 1:MongoDB.Driver. 2:MongoDB.Bson namespace ConsoleApp1{ /// <summary> /// Mongo ...
- .Net Core 3.0 WebAPI && MySQL 8.0搭建详情
微软在2019年9月24日发布了dotNet Core 3.0和C# 8.0,添加了许多新Features,详情点我.无疑dotNet Core 3.0和一个月之后即将发布的dotNet Core 3 ...
- PIE SDK内存矢量数据的创建
1.功能简介 GIS将地理空间数据表示为矢量数据和栅格数据.矢量数据模型使用点.线和多边形来表示具有清晰空间位置和边界的空间要素,如控制点.河流和宗地等,每个要素被赋予一个ID,以便与其属性相关联.栅 ...
- Exif认识(二)
通过php获取exif信息后,像光圈和快门的值还需要转换下,才是我们常用看得懂的值 ApertureValue的值: 拍照时镜头的光圈. 单位是 APEX. 为了转换成普通的 F-number(F-s ...
- Winform中实现ZedGraph不显示y=0这条刻度线
场景 Winforn中设置ZedGraph曲线图的属性.坐标轴属性.刻度属性: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...
- 写 React / Vue 项目时为什么要在列表组件中写 key,其作用是什么
怼一波,在项目中有很多经常用到,但又含糊不清的知识点 框架中的key: 1. 为啥在遍历元素时要用 key :在开发过程中为了保证遍历同级元素的唯一性,用来提高更新 dom 的性能: 2. 凭啥要保证 ...
- NPOI.dll 在哪里?
一.问题 NPOI下载后找不到网上人家说的几个DLL https://bbs.csdn.net/topics/392510552 二.答案: 1.VS2015引用NPOI2.4.1和NuGet的安装方 ...
- 【Linux】yum 安装 JDK
一.查看java的所有版本 yum list java* 二.安装jdk8 yum install java--openjdk.x86_64 三.检查是否安装完成 java -version 四.默认 ...