winform开发是或多或少都会接触datagridview控件,如果数据量大,那么必须使用分页功能,但是datagridview自身并没有分页,所以我们要自己实现。在网上搜了一些发现没有太适合自己的,要么嫌代码过于多不想看,要么自己理解差无法明白其原理,所以打算自己写一个,也希望帮到大家。

第一步:设置4个变量分别记录每页记录数、总记录数、总页数、当前页

        /// <summary>
/// 每页记录数
/// </summary>
public int pageSize = ; /// <summary>
/// 总记录数
/// </summary>
public int recordCount = ; /// <summary>
/// 总页数
/// </summary>
public int pageCount = ; /// <summary>
/// 当前页
/// </summary>
public int currentPage = ;

第二步:构造一个虚拟table用于显示(这里不连接数据库,如果需要自行更改),并算出总页数、总记录数。

DataTable table = new DataTable();

/// <summary>
/// 分页的方法
/// </summary>
/// <param name="str"></param>
private void PageSorter()
{ //创建虚拟表
DataColumn column1 = new DataColumn("test1", Type.GetType("System.String"));
DataColumn column2 = new DataColumn("test2", Type.GetType("System.String"));
DataColumn column3 = new DataColumn("test3", Type.GetType("System.String")); table.Columns.Add(column1); //将列添加到table表中
table.Columns.Add(column2);
table.Columns.Add(column3);
for (int i = ; i <= ; i++)
{
DataRow dr = table.NewRow(); //table表创建行
dr["test1"] = "资产编号" + i.ToString();
dr["test2"] = "资产名称" + i.ToString();
dr["test3"] = "规格型号" + i.ToString();
table.Rows.Add(dr); //将数据加入到table表中
} recordCount = table.Rows.Count; //记录总行数
pageCount = (recordCount / pageSize);
if ((recordCount % pageSize) > )
{
pageCount++;
} //默认第一页
currentPage = ; LoadPage( );//调用加载数据的方法
}

第三步:进行加载显示数据

/// <summary>
/// LoadPage方法
/// </summary>
private void LoadPage( )
{
if (currentPage < ) currentPage = ;
if (currentPage > pageCount) currentPage = pageCount; int beginRecord; //开始指针
int endRecord; //结束指针
DataTable dtTemp;
dtTemp = table.Clone(); beginRecord = pageSize * (currentPage - );
if (currentPage == ) beginRecord = ;
endRecord = pageSize * currentPage; if (currentPage == pageCount) endRecord = recordCount;
for (int i = beginRecord; i < endRecord; i++)
{
dtTemp.ImportRow(table.Rows[i]);
} dataGridView1.Rows.Clear(); for (int i = ; i < dtTemp.Rows.Count; i++)
{
dataGridView1.Rows.Add(new object[] { dtTemp.Rows[i][] , dtTemp.Rows[i][] , dtTemp.Rows[i][] });
} labPageIndex.Text = "当前页: " + currentPage.ToString() + " / " + pageCount.ToString();//当前页
labRecordCount.Text = "总行数: " + recordCount.ToString() + " 行";//总记录数
}

第四步:设置按钮点击事件

/// <summary>
/// 首页
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnFirst_Click(object sender, EventArgs e)
{
if (currentPage == )
{ return; }
currentPage = ;
LoadPage();
}
/// <summary>
/// 上一页
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnPrev_Click(object sender, EventArgs e)
{
if (currentPage == )
{ return; }
currentPage--;
LoadPage();
}
/// <summary>
/// 下一页
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnNext_Click(object sender, EventArgs e)
{
if (currentPage == pageCount)
{ return; }
currentPage++;
LoadPage();
}
/// <summary>
/// 尾页
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnLast_Click(object sender, EventArgs e)
{
if (currentPage == pageCount)
{ return; }
currentPage = pageCount;
LoadPage();
}

第五步:load事件加载时显示数据

private void Form1_Load(object sender, EventArgs e)
{
PageSorter();//分页
}

最终展示结果

最后附上源码地址

  链接: https://pan.baidu.com/s/1J4qI5RZ2AhV3ycml2a2htA

  提取码: 49ie

C# datagridview分页功能的更多相关文章

  1. C# 实现DataGridView分页功能

    C#实现DataGridView分页功能 2010-07-17 13:45:42|  分类: C#|字号 订阅     从界面可以看到,在设计时需要一个DataGridView.BindingNavi ...

  2. WinForm DataGridView分页功能

    WinForm 里面的DataGridView不像WebForm里面的GridView那样有自带的分页功能,需要自己写代码来实现分页,效果如下图: 分页控件  .CS: 1 using System; ...

  3. C# Winform DataGridView分页功能的实现

    // 1.定义几个所需的公有成员: ; //每页显示行数 ; //总记录数 ; //页数=总记录数/每页显示行数 ; //当前页号 ; //当前记录行 DataSet ds = new DataSet ...

  4. 创建有输出参数的存储过程并在c#中实现DataGridView分页功能

    不足之处,欢迎指正! 创建有输出参数的存储过程 if exists(select * from sysobjects where name='usp_getPage1') drop procedure ...

  5. winform中DataGridView实现分页功能

    WinForm轻松实现自定义分页 (转载) WinForm轻松实现自定义分页 (转载)   转载至http://xuzhihong1987.blog.163.com/blog/static/26731 ...

  6. DataGridView使用BindingNavigator实现简单分页功能

    接上一篇<DataGridView使用自定义控件实现简单分页功能>,本篇使用BindingNavigator来实现简单分页功能.其实也只是借用了一个BindingNavigator空壳, ...

  7. 简单封装分页功能pageView.js

    分页是一个很简单,通用的功能.作为一个有经验的前端开发人员,有义务把代码中类似这样公共的基础性的东西抽象出来,一来是改善代码的整体质量,更重要的是为了将来做类似的功能或者类似的项目,能减少不必要的重复 ...

  8. php对文本文件进行分页功能简单实现

    php对文本文件进行分页功能简单实现 <!DOCTYPE> <html> <head> <meta http-equiv="Content-type ...

  9. Asp.net MVC3表格共用分页功能

    在建立的mvc3项目中,在Razor(CSHTML)视图引擎下,数据会在表格中自动的生成,但分页没有好的控件实现,这里我们开发了设计了一个分页的模板,适合于没有数据提交和有数据提交的分页的分页. 第一 ...

随机推荐

  1. Polynomial regression

  2. PC滚动条样式

    #jmwin2为外部容器             #jmwin2{   width: 90%;   height: 65%;   background: white;   position: abso ...

  3. protobuf shutdownprotobuflibrary的时候crash,释放的指针出错

    往往是多个子项目中有多次链接使用. 解决方法: 1. 使用静态库. 2. issure中有说2.6.1还未允许多次释放,建议使用3.4.x版本. 参考: https://github.com/prot ...

  4. jQuery实现动态分割div—通过拖动分隔栏实现上下、左右动态改变左右、上下两个相邻div的大小

    由jQuery实现上下.左右动态改变左右.上下两个div的大小,需要自己引入jquery1.8.0.min.js包 可用于页面布局. //============================ind ...

  5. APIView流程——请求方式分发

  6. 带标签的循环语句、switch

    今天继续更新,控制流程的剩余部分内容,带标签的循环语句中的continue/break 的使用方法,以及switch关键字的使用方法.例1:带标签的continue/break.package com ...

  7. 【转】机器学习在B2B的应用

    原文地址:http://www.mbtmag.com/blog/2017/04/artificial-intelligence-making-it-work-industrial-companies? ...

  8. Knockout.js快速学习笔记

    原创纯手写快速学习笔记(对官方文档的二手理解),更推荐有时间的话读官方文档 框架简介(Knockout版本:3.4.1 ) Knockout(以下简称KO)是一个MVVM(Model-View-Vie ...

  9. Forward团队-爬虫豆瓣top250项目-项目进度

    项目地址:https://github.com/xyhcq/top250 我们的项目是爬取豆瓣top250的电影的信息,在做这个项目前,我们都没有经验,完全是从零开始,过程中也遇到了很多困难,不过我们 ...

  10. 【repost】JavaScript 运行机制详解:再谈Event Loop

    一年前,我写了一篇<什么是 Event Loop?>,谈了我对Event Loop的理解. 上个月,我偶然看到了Philip Roberts的演讲<Help, I'm stuck i ...