C#实现DataGridView分页功能

2010-07-17 13:45:42|  分类: C#|字号 订阅

 
 

从界面可以看到,在设计时需要一个DataGridView、BindingNavigate、BindingSource控件,分别命名为dgvInfo、bdnInfo、bdsInfo。

在bdnInfo控件中添加几个用于选择页面的lable和botton,如上图所示。

设计时:

1、定义几个所需的公有成员:

int pageSize = 0;     //每页显示行数

int nMax = 0;         //总记录数

int pageCount = 0;    //页数=总记录数/每页显示行数

int pageCurrent = 0;   //当前页号

int nCurrent = 0;      //当前记录行

DataSet ds = new DataSet();

DataTable dtInfo = new DataTable();

2、在窗体载入事件中,从数据源读取记录到DataTable中:

string strConn = "SERVER=www.dow88.cn;DATABASE=NORTHWIND;UID=SA;PWD=ULTRATEL";   //数据库连接字符串

SqlConnection conn = new SqlConnection(strConn);

conn.Open();

string strSql = "SELECT * FROM CUSTOMERS";

SqlDataAdapter sda = new SqlDataAdapter(strSql,conn);

sda.Fill(ds,"ds");

conn.Close();

dtInfo = ds.Tables[0];

InitDataSet();

3、用当前页面数据填充DataGridView

private void InitDataSet()

...{

pageSize = 20;      //设置页面行数

nMax = dtInfo.Rows.Count;

pageCount=(nMax/pageSize);    //计算出总页数

if ((nMax % pageSize) > 0) pageCount++;

pageCurrent = 1;    //当前页数从1开始

nCurrent = 0;       //当前记录数从0开始

LoadData();

}

private void LoadData()

...{

int nStartPos = 0;   //当前页面开始记录行

int nEndPos = 0;     //当前页面结束记录行

DataTable dtTemp = dtInfo.Clone();   //克隆DataTable结构框架

if (pageCurrent == pageCount)

nEndPos = nMax;

else

nEndPos = pageSize * pageCurrent;

nStartPos = nCurrent;

lblPageCount.Text = pageCount.ToString();

txtCurrentPage.Text = Convert.ToString(pageCurrent);

//从元数据源复制记录行

for (int i = nStartPos; i < nEndPos; i++)

...{

dtTemp.ImportRow(dtInfo.Rows[i]);

nCurrent++;

}

bdsInfo.DataSource = dtTemp;

bdnInfo.BindingSource = bdsInfo;

dgvInfo.DataSource = bdsInfo;

}

4、菜单响应事件:

private void bdnInfo_ItemClicked(object sender, ToolStripItemClickedEventArgs e)

...{

if (e.ClickedItem.Text == "关闭")

...{

this.Close();

}

if (e.ClickedItem.Text == "上一页")

...{

pageCurrent--;

if (pageCurrent <= 0)

...{

MessageBox.Show("已经是第一页,请点击“下一页”查看!");

return;

}

else

...{

nCurrent = pageSize * (pageCurrent - 1);

}

LoadData();

}

if (e.ClickedItem.Text == "下一页")

...{

pageCurrent++;

if (pageCurrent > pageCount)

...{

MessageBox.Show("已经是最后一页,请点击“上一页”查看!");

return;

}

else

...{

nCurrent=pageSize*(pageCurrent-1);

}

LoadData();

}

}

C# 实现DataGridView分页功能的更多相关文章

  1. WinForm DataGridView分页功能

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

  2. C# datagridview分页功能

    winform开发是或多或少都会接触datagridview控件,如果数据量大,那么必须使用分页功能,但是datagridview自身并没有分页,所以我们要自己实现.在网上搜了一些发现没有太适合自己的 ...

  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. 转 IDEA 解决代码提示功能消失

    转载路径是  https://blog.csdn.net/hmily_hui/article/details/78213037 原文地址:https://github.com/Damao/Intell ...

  2. JS高级——缓存原理

    缓存的原理 1.就是将常用的数据存储起来,提供便利,减少查询次数和所消耗的事件 2.利用作用的原理所产生的数据库:非关系型数据库(内存型数据库) MongoDB.Redis等 3.还有网站静态页面缓存 ...

  3. mysql常用命令介绍

    mysql适用于在Internet上存取数据,支持多种平台 1.主键:唯一标识表中每行的这个列,没有主键更新或删除表中的特定行很困难. 2.连接mysql可以用Navicat 要读取数据库中的内容先要 ...

  4. 3星|《刷新》:微软第三任CEO上任三年后的回顾

    刷新:重新发现商业与未来 作者是微软第三任CEO,2014年2月上任.本书英文版出版于2017年9月,全书内容大致截至于2017年年初,算是作者上任三年后的回顾. 书中作者讲了不少自己的个人经历.作者 ...

  5. 体验SqlServer Express 2014

    想使用SQLServer Express记录一些数据,但使用起来并不令人愉快.SQLServer Express是一个免费的可用数据库,但似乎设置了一些门槛,多少显得并不真心实意.抛开版本(技术)限制 ...

  6. Cesium学习笔记(五):3D 模型 (http://blog.csdn.net/umgsoil/article/details/74572877)

    Cesium支持3D模型,包括关键帧动画,皮肤的改变还有单个节点的选择等,Cesium还提供了了一个基于网络的工具,将COLLADA模型转换为glTF,方便和优化模型添加 还记得我们在实体添加的时候添 ...

  7. centos7mini版安装pyenv,ipython和jupyter环境.2090513

    第一节: 搭建centos7下pyenv,ipython,jupyter环境 pyenv:是一个python多版本管理器,在这个里面可以安装多个版本共存,然后可以安装需求选择版本. ipython:就 ...

  8. c++ map: 使用struct或者数组做value

    Notice 如果是program中有两个map对象,可能你需要两个map iterator,但是注意两个iter object不能命名一样,可以分别为iter1, iter2 Example #in ...

  9. oralce 创建表空间 和 查询进程

    -- Create the user create user lesdba identified by les_321 default tablespace USERS temporary table ...

  10. selenium常用操作,查找元素,操作Cookie,获取截图,获取窗口信息,切换,执行js代码

    目录: 1. 常用操作 2. 查找元素 3. 操作Cookie 4. 获取截图 5. 获取窗口信息 6. 切换 7. 执行JS代码 简介 selenium.webdriver.remote.webdr ...