博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DataGridView分頁控件
阅读量:4041 次
发布时间:2019-05-24

本文共 8160 字,大约阅读时间需要 27 分钟。

效果如下:

在这里插入图片描述

在这里插入图片描述

一、在vs中新建一個 WindowsFormsControlLibrary項目

1.拖入相關的控件
在这里插入图片描述

2.代碼

using System;using System.Collections.Generic;using System.ComponentModel;using System.Drawing;using System.Data;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace LWF_PageControl{
public partial class LwfPageControl: UserControl {
public LwfPageControl() {
InitializeComponent(); } #region fields & properties //current row number from public virtual int CurRowIndexFrom {
get; set; } //current row number to public virtual int CurRowIndexTo {
get; set; } /// /// Current Page /// private int _PageIndex=1; public virtual int PageIndex {
get {
return _PageIndex; } set {
_PageIndex = value; } } /// /// PageSize /// private int _PageSize = 100; //值可以在控件屬性中設置 public virtual int PageSize {
get {
return _PageSize; } set {
_PageSize = value; } } /// /// Record count /// private int _RecordCount = 0; public virtual int RecordCount {
get {
return _RecordCount; } // set { _RecordCount = value; } } /// /// Page count /// private int _PageCount = 0; public int PageCount {
get {
if (PageSize != 0) {
_PageCount = GetPageCount(); } return _PageCount; } } #endregion #region the event when page is changed public event EventHandler OnPageChanged; #endregion# region PageControl Event and funtions /// /// set controls (button) enabled /// private void setControlEnabled() {
btnFirst.Enabled = btnGo.Enabled = btnLast.Enabled = btnNextPage.Enabled = btnPrewPage.Enabled = true; } /// /// Get the Page count /// ///
private int GetPageCount() {
if (PageSize == 0) {
return 0; } int pageCount = RecordCount / PageSize; if (RecordCount % PageSize == 0) {
pageCount = RecordCount / PageSize; } else {
pageCount = RecordCount / PageSize + 1; } return pageCount; } /// /// invoke for the client /// /// public void DrawControl(int count) {
_RecordCount = count; DrawControl(false); } private void DrawControl(bool callEvent) {
txtCurPage.Text = PageIndex.ToString(); lblOfTolPage .Text = string.Format(" of {0}", PageCount.ToString()); txtPageSize.Text = PageSize.ToString(); CurRowIndexFrom = (PageIndex - 1) * PageSize + 1; CurRowIndexTo = PageIndex *PageSize > RecordCount ? RecordCount : (PageIndex * PageSize); lblRowInfo.Text = string.Format("{0} to {1} of [{2}]", CurRowIndexFrom.ToString(), CurRowIndexTo.ToString (), RecordCount.ToString()); if (callEvent && OnPageChanged != null) {
OnPageChanged(this, null); } setControlEnabled(); if (PageCount == 1) //when the page equal 1 {
btnFirst.Enabled = btnGo.Enabled = btnLast.Enabled = btnNextPage.Enabled = btnPrewPage.Enabled = false; } else if (PageIndex == 1) {
btnFirst.Enabled = btnPrewPage.Enabled = false; } if (PageIndex == PageCount) {
btnLast.Enabled = btnNextPage.Enabled = false; } } #endregion #region button control event private void btnFirst_Click(object sender, EventArgs e) {
PageIndex = 1; DrawControl(true); } private void btnPrewPage_Click(object sender, EventArgs e) {
PageIndex = Math.Max(1, PageIndex - 1); DrawControl(true); } private void btnNextPage_Click(object sender, EventArgs e) {
PageIndex = Math.Min(PageCount, PageIndex + 1); DrawControl(true); } private void btnLast_Click(object sender, EventArgs e) {
PageIndex = PageCount; DrawControl(true); } private void btnGo_Click(object sender, EventArgs e) {
int num = 0; if (int.TryParse(txtCurPage.Text.Trim(), out num) && num > 0) {
PageIndex = num; DrawControl(true); } } /// ///press enter in the textbox to page /// /// /// private void tbToPage_KeyPress(object sender, KeyPressEventArgs e) {
if (e.KeyChar == (char)(13)) {
btnGo_Click(null, null); } } #endregion private void tbToPage_TextChanged(object sender, EventArgs e) {
int num = 0; if (int.TryParse(txtCurPage.Text, out num) && num > 0) {
if (num > PageCount) {
txtCurPage.Text = PageCount.ToString();// the max page is Pagecount } } } private bool isTxtPageSizeChanged = false; private void txtPageSize_TextChanged(object sender, EventArgs e) {
int num = 0; if (!int.TryParse(txtPageSize.Text.Trim(), out num) || num < 0) {
num = 100; txtPageSize.Text = "100"; } else {
isTxtPageSizeChanged = true; } _PageSize = num; } /// /// when changed the pagesize , go to the first page /// /// /// private void txtPageSize_Leave(object sender, EventArgs e) {
if (isTxtPageSizeChanged) {
isTxtPageSizeChanged = false; btnFirst_Click(null, null); } } }}

編譯后就可以給其它項目使用

二、在其它項目窗體中使用

1.引用該控件dll

2.在右邊控件欄空白處右擊,選擇項目–》瀏覽–》找到該控件dll , 確定后就可看到該控件了。
3.將控件拉入窗體中
4.代碼調用:

**例子:分解1:**        private void Form1_Load(object sender, EventArgs e)        {
//激活OnPageChanged事件。 lwfPageControl1:控件名稱 lwfPageControl1.OnPageChanged += lwfPageControl1_OnPageChanged; } **分解2:** /// /// 查詢按鈕事件 /// private void SearchEvent() {
//得到全部查詢結果,注意用 Row_Number() 作為分頁的記錄篩選,然後在下面再用Linq 取出分頁記錄。 當然也可以(使用存儲過程)每次取出第 M ----N 個記錄,也是比較常用方法。 DataSet ds = sqlherpler.GetData("SELECT Row_Number() over (order by id) as rowindex,* FROM Employee", null); queryTable = ds.Tables[0];//員工表 //調用pageControl 加載數據事件 LoadData_ForPageControl(); } **分解3:** /// /// 加载数据--for PageControl /// private void LoadData_ForPageControl() {
int count = queryTable.Rows.Count; //查詢結果的記錄數 lwfPageControl2.DrawControl(count); //使用Linq 在查詢結果表中取第 M ----N 個記錄. var query = queryTable.AsEnumerable().Where((o) => int.Parse(o["rowindex"].ToString ()) >= lwfPageControl1.CurRowIndexFrom && int.Parse(o["rowindex"].ToString()) <= lwfPageControl1.CurRowIndexTo); dgv1.DataSource = query.Any() ? query.CopyToDataTable
().DefaultView : null; } ///
/// 控件分頁按鈕事件 /// ///
///
private void lwfPageControl1_OnPageChanged(object sender, EventArgs e) {
LoadData_ForPageControl(); }

转载地址:http://csmdi.baihongyu.com/

你可能感兴趣的文章
C++11线程指南(2)--Lambda线程实现
查看>>
C++11线程指南(3)--右值与左值
查看>>
C++11线程指南(4)--右值引用与移动语义
查看>>
C++11线程指南(5)--线程的移动语义实现
查看>>
C++11线程指南(6)--共享内存与互斥
查看>>
C++11线程指南(7)--资源竞争条件
查看>>
C++11线程指南(8)--死锁
查看>>
算法与数据结构概述
查看>>
select, poll, epoll详解(一)
查看>>
select, poll, epoll详解(二)
查看>>
Swill使用感受
查看>>
C程序的内存分布
查看>>
C&C++(1) - extern “C“的作用
查看>>
C&C++(2) - void*在C和C++中的不同点
查看>>
C&C++(3) - 在C与C++中运行结果不同的程序
查看>>
C&C++(4) - C与C++中字符串的类型差异
查看>>
C++引用(1) - 基本介绍
查看>>
C++引用(2) - 引用能否指向一个无效地址?
查看>>
C++引用(3) - 使用引用或者指针传递参数
查看>>
C++函数重载(1) - 基本介绍
查看>>