当前位置: 首页 > news >正文

C# WinForm分页控件实现与使用详解

C# WinForm分页控件实现与使用详解

概述

在WinForms应用程序开发中,数据分页是常见的需求。本文将介绍如何实现一个功能完整的分页控件,并在窗体中如何使用该控件进行数据分页展示。

分页控件实现

核心属性与字段

public partial class PageControl : UserControl
{public int currentPage = 1;          // 当前页码public int pageSize = 20;            // 每页数据量public int totalCount = 0;           // 总数据条数public int TotalPages = 0;           // 总页数private BindingSource bindingSource = new BindingSource();public delegate void ShowDataDelegate();  // 数据展示委托public ShowDataDelegate showDataDelegate; // 委托实例public bool isOK = false;            // 控件就绪标志
}

控件初始化

public PageControl()
{this.InitializeComponent();// 初始化每页显示数量选项this.comboBoxPageSize.Items.AddRange(new object[5]{(object) 20,(object) 50,(object) 80,(object) 100,(object) 150});this.comboBoxPageSize.SelectedIndex = 0;
}

页面导航功能

private void NavigateTo(int page)
{if (isOK){if (page < 1 || page > this.TotalPages)return;this.currentPage = page;}
}// 页面跳转按钮事件处理
private void btnFirst_Click(object sender, EventArgs e) 
{ this.NavigateTo(1); showDataDelegate(); 
}private void btnPrevious_Click(object sender, EventArgs e)
{this.NavigateTo(this.currentPage - 1);showDataDelegate();
}private void btnNext_Click(object sender, EventArgs e) 
{this.NavigateTo(this.currentPage + 1); showDataDelegate(); 
}private void btnLast_Click(object sender, EventArgs e) 
{ this.NavigateTo(this.TotalPages); showDataDelegate(); 
}

页码输入处理

private void BtnGo_Click(object sender, EventArgs e)
{int result;if (int.TryParse(this.txtGoPage.Text, out result)){this.NavigateTo(result);showDataDelegate();}else{MessageBox.Show("非法字符!");}
}// 限制只能输入数字和回退键
private void txtGoPage_KeyPress(object sender, KeyPressEventArgs e)
{if (!char.IsDigit(e.KeyChar) && e.KeyChar != '\b')e.Handled = true;if (e.KeyChar != '\r')return;this.BtnGo_Click(sender, (EventArgs)e);
}

页面信息更新

public void UpdatePageInfo()
{this.TotalPages = this.totalCount % this.PageSize != 0 ? this.totalCount / this.PageSize + 1 : this.totalCount / this.PageSize;this.lblPageInfo.Text = string.Format("第 {0} 页 / 共 {1} 页(共 {2} 条数据)", this.currentPage, this.TotalPages, this.totalCount);
}

在窗体中使用分页控件

public FrmQRcodeRecordMG()
{InitializeComponent();DgvData.AutoGenerateColumns = false;ShowDgvSetting();// 初始化下拉框CmbFaild.DisplayMember = "Value";CmbFaild.ValueMember = "Key";CmbFaild.DataSource = dicHeader.ToList();CmbFaild.SelectedIndex = 0;// 绑定分页控件事件pageControl1.showDataDelegate += new PageControl.ShowDataDelegate(PageQuery);pageControl1.isOK = true;
}

分页查询实现

private void PageQuery()
{if (this.InvokeRequired){this.Invoke(new System.Action(() => { PageQuery(); }));return;}try{ConditionalType conditionalType = ConditionalType.Like;Dictionary<string, object> dic = new Dictionary<string, object>();// 调用服务层获取分页数据allData = QRCodeService.GetPageDataByDic(pageControl1.currentPage, pageControl1.pageSize, ref pageControl1.totalCount, dic, conditionalType);// 更新分页信息pageControl1.UpdatePageInfo();// 更新DataGridView数据源if (DgvData.DataSource != null){this.BindingContext[DgvData.DataSource].SuspendBinding();}DgvData.DataSource = new List<object>();DgvData.DataSource = allData;this.BindingContext[DgvData.DataSource].ResumeBinding();}catch (Exception ex){CommonFunc.ShowTip(ex.Message);}
}

使用说明

  1. 控件初始化:将PageControl添加到窗体后,需要设置showDataDelegate委托并设置isOK = true

  2. 数据查询:实现分页查询方法,并在其中调用服务层获取数据

  3. 页面更新:获取数据后调用UpdatePageInfo()方法更新分页信息

  4. 数据绑定:将获取的数据绑定到DataGridView或其他数据显示控件

总结

本文介绍了一个功能完整的WinForms分页控件的实现与使用方法。该控件提供了基本的页面导航功能,包括首页、上一页、下一页、末页按钮,页码输入框以及每页显示数量的选择。通过委托机制,实现了控件与具体数据查询逻辑的解耦,使控件具有更好的复用性。

在实际使用中,只需将控件添加到窗体,实现数据查询方法,并将方法绑定到控件的委托上即可轻松实现数据分页功能。这种设计模式使得分页逻辑与业务逻辑分离,提高了代码的可维护性和可扩展性。

希望本文对你在WinForms开发中实现分页功能有所帮助!


文章转载自:

http://ikFQq25v.zcmpk.cn
http://NJSVoEb8.zcmpk.cn
http://i0aBY2vF.zcmpk.cn
http://mqRHE75e.zcmpk.cn
http://DuYX9dtV.zcmpk.cn
http://qbuiNjIl.zcmpk.cn
http://JfSEcSfI.zcmpk.cn
http://6qmex8yd.zcmpk.cn
http://DDxAxFZX.zcmpk.cn
http://8zWmzpiL.zcmpk.cn
http://4zydJ7P0.zcmpk.cn
http://reEvFZEX.zcmpk.cn
http://EFW9dkyB.zcmpk.cn
http://LI8VXvaf.zcmpk.cn
http://qEHRLn1G.zcmpk.cn
http://yLxevMGS.zcmpk.cn
http://Sz4CPf6h.zcmpk.cn
http://K2rcdsve.zcmpk.cn
http://p3RNjN1T.zcmpk.cn
http://Y72sj5zj.zcmpk.cn
http://WPoqjOr7.zcmpk.cn
http://Fx5b6w0u.zcmpk.cn
http://HugSGCPK.zcmpk.cn
http://c1VFqrgk.zcmpk.cn
http://9lGuVnGC.zcmpk.cn
http://m7rRET6Z.zcmpk.cn
http://HHLGeU1y.zcmpk.cn
http://2IOHzhfp.zcmpk.cn
http://qb47e58S.zcmpk.cn
http://aKTSJ73j.zcmpk.cn
http://www.dtcms.com/a/370442.html

相关文章:

  • 在Ubuntu平台搭建RTMP直播服务器使用SRS简要指南
  • 设计艺术~缓存结构设计
  • 腾讯混元游戏视觉生成平台正式发布2.0版本
  • MySQL整理【01】
  • MQTT 与 Java 框架集成:Spring Boot 实战(三)
  • docker 推送仓库(含搭建、代理等)
  • 了解Python
  • LeetCode //C - 848. Shifting Letters
  • 数学判官为中医续命
  • 华为OmniPlacement技术深度解析:突破超大规模MoE模型推理瓶颈的创新设计
  • Web Worker 从原理到实战 —— 把耗时工作搬到后台线程,避免页面卡顿
  • [网络入侵AI检测] docs | 任务二分类与多分类
  • Browser Use:打造你的浏览器自动化助手
  • 全维度质量保障:捷多邦厚铜板控制方法详解
  • PDF文件基础-计算机字体
  • Python 制作的一个小说在线阅读工具
  • 携程社招前端面经
  • 基于扰动观察法(PO)的光伏最大跟踪策略Simulink
  • 提示语规则引擎:spring-ai整合liteflow
  • 少儿舞蹈小程序(9)校区信息展示
  • EG2103 SOP-8 内置600V功率MOS管 栅极驱动芯片
  • 【目录-判断】鸿蒙HarmonyOS开发者基础
  • 实体商业创新观察:AI 驱动的本地生活服务新模式解析
  • ThinkPHP 6框架常见错误:htmlentities()函数参数类型问题解决
  • 【Big Data】Apache Kafka 分布式流处理平台的实时处理实践与洞察
  • 大模型服务之下的新旧政务智能系统比较
  • 贪心算法应用:流行病干预策略问题详解
  • 雪球科技Java开发工程师笔试题
  • 【pyhton】函数
  • 进阶向:密码生成与管理工具