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://www.pswp.cn/bicheng/96029.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/96029.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/96029.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

高級 ACL 有多強?一個規則搞定 “IP + 端口 + 協議” 三重過濾

一、實驗拓撲及描述 二、實驗需求 1、完成拓撲中各設備的基礎配置&#xff0c;使得全網互通&#xff1b; 2、在上一個需求的基礎上&#xff0c;在路由器上部署高級ACL&#xff0c;使得Client1無法訪問Server的HTTP服務&#xff0c;但是PC1依然能夠訪問服務器及其他節點&#xf…

支持多材質密度設置的金屬重量計算使用指南

傳統手工計算各種型材&#xff08;如鋼管、角鋼、鋼板等&#xff09;的重量繁瑣且容易出錯。 它的體積小巧&#xff0c;不足100KB&#xff0c;運行不占內存&#xff0c;綠色免安裝&#xff0c;雙擊即開&#xff0c;使用便捷。 可計算鋼管、鋼板、型鋼、角鋼等常見型材的重量&a…

在Spring Boot中使用H2數據庫

好處 程序啟動時自動創建數據庫數據表。 使用步驟 引入依賴&#xff1a; <dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope></dependency><dependency><groupId&…

Day21_【機器學習—決策樹(2)—ID3樹 、C4.5樹、CART樹】

一、ID3 決策樹1. 核心思想使用信息增益&#xff08;Information Gain&#xff09;作為特征選擇的標準&#xff0c;遞歸地構建決策樹。2. 特征選擇標準信息增益&#xff08;IG&#xff09;&#xff1a;選擇使信息增益最大的特征進行劃分。3. 優點算法簡單&#xff0c;易于理解。…

2025計算機視覺新技術

CLIP / BLIP-3 類「視覺-語言大模型」 ? 是什么&#xff1a;讓網絡自己學會“看圖說話”&#xff0c;zero-shot 就能分類、檢測、檢索。 ? 能干什么&#xff1a;不寫訓練代碼&#xff0c;直接一句中文 prompt 就把商品圖分成 500 類。 ? 落地難度&#xff1a;★☆☆&#xf…

[光學原理與應用-431]:非線性光學 - 能生成或改變激光波長的物質或元件有哪些?

要生成或改變激光波長&#xff0c;可依賴增益介質、非線性光學元件、調諧元件及特殊激光器設計&#xff0c;以下是一些關鍵物質和元件及其作用機制&#xff1a;一、增益介質&#xff1a;波長的“決定者”增益介質是激光器的核心&#xff0c;其原子或分子的能級結構直接決定輸出…

接口權限驗證有哪些方式

接口權限驗證是保障 API 安全的核心機制&#xff0c;常見的方式有以下幾類&#xff0c;適用于不同場景和安全需求&#xff1a; 1. 基于令牌&#xff08;token&#xff09;的驗證 &#xff08;1&#xff09;JWT&#xff08;JSON Web Token&#xff09; 原理&#xff1a; 服務器驗…

Go開發的自行托管代理加速服務:支持Docker與GitHub加速

HubProxy&#xff1a;一站式解決Docker與GitHub訪問難題的輕量級代理服務作為開發者&#xff0c;我們經常遇到這些問題&#xff1a;Docker鏡像拉取速度慢得讓人抓狂&#xff0c;GitHub Release文件下載到一半斷開&#xff0c;或者某些境外容器倉庫完全無法訪問。最近發現的hubp…

用Python打造逼真的照片桌面:從拖拽到交互的完整實現

在這個數字化時代&#xff0c;我們經常需要處理大量的照片和圖片文件。今天我將帶你一步步實現一個功能豐富的照片桌面程序&#xff0c;讓你可以像在真實桌面上擺放照片一樣操作數字圖片。這個程序使用wxPython構建&#xff0c;支持拖拽、調整大小、刪除等交互功能。C:\pythonc…

《sklearn機器學習——模型的持久性》joblib 和 pickle 進行模型保存和加載

模型持久性在 Scikit-learn 中的應用詳解 模型持久性的基本概念 在機器學習領域&#xff0c;模型持久性是指將訓練好的模型保存到磁盤或數據庫中&#xff0c;以便在后續的預測任務中能夠直接使用&#xff0c;而無需重新訓練模型。這一過程不僅提高了模型的可重用性&#xff0c;…

前端-組件化開發

目錄 一.組件化 二.根組件 三.App.vue文件&#xff08;單文件組件&#xff09;的三個組成部分 四.普通組件的注冊和使用&#xff1a; 1.普通組件的創建 2.局部注冊 3.全局注冊 &#x1f9e0; 補充小技巧&#xff1a; &#x1f4a1; 關于組件名&#xff08;第一個參數&…

UNIX/macOS路由表查詢原理與實現

&#x1f310; UNIX/macOS路由表查詢原理與實現&#x1f4cc; 功能全景圖 #mermaid-svg-mz6rxrQ73xinNsqc {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-mz6rxrQ73xinNsqc .error-icon{fill:#552222;}#mermaid-svg…

Python爬蟲實戰:研究Style sheets模塊,構建電商平臺筆記本電腦銷售數據采集和分析系統

1. 引言 1.1 研究背景 在數字經濟時代,互聯網蘊含的海量數據已成為企業決策與學術研究的核心資源。網絡爬蟲技術通過自動化請求、解析網頁,能夠高效提取公開數據,為市場分析、競品研究等場景提供基礎支撐。Python 憑借其豐富的生態庫(如 Requests、BeautifulSoup、Pandas…

lesson55:CSS導航組件全攻略:從基礎導航條到動態三級菜單與伸縮菜單實現

目錄 一、CSS導航條&#xff1a;構建基礎導航系統 1.1 語義化HTML結構 1.2 現代Flexbox布局實現 1.3 核心技術解析 二、三級菜單&#xff1a;構建多層級導航體系 2.1 嵌套HTML結構 2.2 多級菜單CSS實現 2.3 關鍵技術解析 三、伸縮菜單&#xff1a;實現動態交互導航 3…

Linux基礎知識(二)

文件操作1. 怎么理解 I/O 重定向&#xff1f; 2. /dev/null 是什么&#xff0c;有什么用途&#xff1f; 3. 解釋下列命令的結果&#xff1a;&> /dev/null 、2>> file 4. 怎么理解管道&#xff1f;管道和重定向有什么區別&#xff1f; 5. 在什么情況下需要使用 tee…

Ribbon和LoadBalance-負載均衡

Ribbon和LoadBalance-負載均衡 Ribbon 和 Spring Cloud LoadBalancer (SCL) 都是 Spring Cloud 生態中實現客戶端負載均衡的核心組件&#xff0c;但它們在定位、架構、實現和功能上有顯著區別。以下是詳細的對比分析&#xff1a; ?1. 核心定位與背景??Ribbon:??起源于 ?N…

【數據可視化-107】2025年1-7月全國出口總額Top 10省市數據分析:用Python和Pyecharts打造炫酷可視化大屏

&#x1f9d1; 博主簡介&#xff1a;曾任某智慧城市類企業算法總監&#xff0c;目前在美國市場的物流公司從事高級算法工程師一職&#xff0c;深耕人工智能領域&#xff0c;精通python數據挖掘、可視化、機器學習等&#xff0c;發表過AI相關的專利并多次在AI類比賽中獲獎。CSDN…

Java中的字符串

字符串 String Java編譯器對String類型有特殊處理&#xff0c;可用使用"…"來表示一個字符串。實際上字符串在String內部是通過一個數組表示的。 Java中字符串的一個重要特點是不可變。這種不可變性是通過內部的private final char[]字段&#xff0c;以及沒有任何修改…

ragflow MCP 調用核心提示詞解析:邏輯閉環與優化方向

大家好&#xff5e;我是你們的提示詞工程師朋友&#xff0c;今天想跟大家聊聊開源項目 ragflow 里&#xff0c;MCP調用體系中的兩個關鍵提示詞。最近在研究調用工具和提示詞撰寫之間的平衡態。這倆家伙在信息處理和問題解決里作用不小&#xff0c;既有讓人眼前一亮的優勢?&…

從基礎功能到自主決策, Agent 開發進階路怎么走?

Agent 開發進階路線 基礎功能開發 環境感知與數據采集&#xff1a;傳感器集成、數據預處理&#xff08;濾波、歸一化&#xff09;、多模態數據融合簡單規則引擎&#xff1a;基于if-then的邏輯決策樹、狀態機實現基礎行為控制基礎交互能力&#xff1a;語音識別/TTS集成、基礎對話…