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 ...
随机推荐
- 【spring boot】spring boot 基于redis pipeline 管道,批量操作redis命令
spring boot 2.x 使用RedisTemplate 操作 =================================== 1.pom.xml <!--spring2.0集成r ...
- EF Core中如何设置数据库表自己与自己的多对多关系
本文的代码基于.NET Core 3.0和EF Core 3.0 有时候在数据库设计中,一个表自己会和自己是多对多关系. 在SQL Server数据库中,现在我们有Person表,代表一个人,建表语句 ...
- ASP.NET Core 3.0 WebApi 系列【1】创建ASP.NET Core WebApi 项目
目录 写在前面 一.运行环境 二.项目搭建 三.测试 API 四.基础知识 五.写在最后 写在前面 C#语言可以创建RESTful服务,被称作WebApi.在这里总结学习使用支持创建.读取.更新.删除 ...
- Jira未授权SSRF漏洞复现(CVE-2019-8451)
0x00 漏洞背景 Jira的/plugins/servlet/gadgets/makeRequest资源存在SSRF漏洞,原因在于JiraWhitelist这个类的逻辑缺陷,成功利用此漏洞的远程攻击 ...
- Mycat高可用解决方案一(mysql安装)
Mycat高可用解决方案一(mysql安装) Mycat关键特性 关键特性 支持SQL92标准 支持MySQL.Oracle.DB2.SQL Server.PostgreSQL等DB的常见SQL语法 ...
- php导出数据到多个csv并打包压缩
1.不压缩直接下载 // 测试php导出大量数据到csv public function actionExportData() { // 设置不超时 set_time_limit(0); // 设置最 ...
- CDH6.1.1阿里云安装实践
概念介绍 CDH概览 CDH是Apache Hadoop和相关项目的最完整.最受测试和最流行的发行版.CDH提供Hadoop的核心元素-可伸缩存储和分布式计算-以及基于web的用户界面和重要的企业功能 ...
- 目标检测论文解读6——SSD
背景 R-CNN系列算法检测速度不够快,YOLO v1检测准确率较低,而且无法检测到密集目标. 方法 SSD算法跟YOLO类似,都属于one stage的算法,即通过回归算法直接从原图得到预测结果,为 ...
- 00-赵志勇机器学习-Logistics_Regression-data.txt(转载)
4.45925637575900 8.22541838354701 0 0.0432761720122110 6.30740040001402 0 6.99716180262699 9.3133933 ...
- emacs第一天
emacsbinw64.sourceforge.net windows的emacs下载地方(绿色软件) 学习快速入门 C-h t 快速入门的帮助文档 C-h 是prefix key 光标移动快捷键 ...