dataGridView 分页功能

### 数据GridView分页功能实现详解 在C# WinForms应用程序中,`DataGridView`是一个非常强大的控件,用于显示和编辑数据。当数据量较大时,为了提高用户体验和系统性能,通常需要实现数据分页功能。下面我们将详细介绍如何通过C#语言在WinForms应用中为`DataGridView`控件添加分页功能。 #### 一、分页概念理解 在讨论具体的实现代码之前,我们需要先了解几个重要的概念: - **Page Size (每页显示记录数)**:指每一页显示的数据条数。 - **Total Records (总记录数)**:数据库或数据源中的总条目数量。 - **Page Count (总页数)**:根据总记录数和每页显示记录数计算得出的页面总数。 - **Current Page (当前页)**:用户正在查看的页面编号。 #### 二、分页逻辑实现 接下来,我们通过分析提供的部分代码来具体讲解分页功能的实现过程。 ##### 1. 变量定义 ```csharp int pageSize = 0; // 每页显示记录数 int nMax = 0; // 总记录数 int pageCount = 0; // 总页数 int pageCurrent = 0; // 当前页 int nCurrent = 0; // 当前记录位置 ``` - `pageSize`: 设置每页显示多少条记录。 - `nMax`: 获取数据源的总记录数。 - `pageCount`: 计算出总的页数。 - `pageCurrent`: 表示当前所在的页数。 - `nCurrent`: 当前记录的位置。 ##### 2. 初始化数据集 ```csharp private void InitDataSet() { Grid(); // dataGridView1初始化 pageSize = 30; // 每页显示30条记录 nMax = dataGridView1.Rows.Count; // 获取总记录数 pageCount = (nMax / pageSize); // 计算总页数 if ((nMax % pageSize) > 0) pageCount++; // 如果有余数,则页数加1 pageCurrent = 1; // 当前页初始化为第1页 nCurrent = 0; // 当前记录位置初始化为0 LoadData(); // 加载数据 } ``` 初始化阶段设置每页显示的记录数,并计算总页数。如果总记录数不能被每页显示记录数整除,则页数加1。 ##### 3. 数据加载方法 ```csharp private void LoadData() { int nStartPos = 0; // 当前页起始记录位置 int nEndPos = 0; // 当前页结束记录位置 DataSet dta = ds.Clone(); // 复制数据集结构 if (pageCurrent == pageCount) { nEndPos = nMax; // 如果是最后一页,则结束位置为总记录数 } else { nEndPos = pageSize * pageCurrent; // 否则为当前页结束位置 } nStartPos = nCurrent; // 起始位置 try { for (int i = nStartPos; i < nEndPos; i++) { dta.Tables[0].ImportRow(ds.Tables[0].Rows[i]); // 将数据导入新的数据集中 nCurrent++; } } catch (Exception) {} dataGridView1.DataSource = dta.Tables[0].DefaultView; // 设置数据源 label1.Text = "" + nMax + ""; // 显示总记录数 label2.Text = "当前页:" + pageCurrent + "/" + pageCount + "页"; // 显示当前页码 } ``` 此方法实现了从原始数据集中抽取指定范围内的记录,并将其填充到`DataGridView`控件中。 ##### 4. 分页按钮事件处理 - **上一页** (`button4_Click`): 用户点击“上一页”按钮时触发的方法。 - **下一页** (`button5_Click`): 用户点击“下一页”按钮时触发的方法。 - **首页** (`button2_Click`): 用户点击“首页”按钮时触发的方法。 - **尾页** (`button3_Click`): 用户点击“尾页”按钮时触发的方法。 每个方法都会根据当前页码计算出新的起始位置,并调用`LoadData()`方法更新数据。 ### 结论 通过以上步骤,我们可以实现在C# WinForms应用程序中对`DataGridView`控件进行简单的分页操作。这种方式不仅提高了程序的性能,还极大地提升了用户的体验。在实际开发过程中,还可以根据需求进一步优化和完善该分页功能。











int pageSize = 0; //每页显示行数
int nMax = 0; //总记录数
int pageCount = 0; //页数=总记录数/每页显示行数
int pageCurrent = 0; //当前页号
int nCurrent = 0; //当前记录行
//尾页
private void button5_Click(object sender, EventArgs e)
{
if (pageCurrent == pageCount)
{
MessageBox.Show("已经是尾页,请点上一页!", "提示信息");
//pageCurrent++;
return;
}
pageCurrent = pageCount;
nCurrent = (pageCount - 1) * pageSize;
LoadData();
}
//下一页
private void button4_Click(object sender, EventArgs e)
{
pageCurrent++;
if (pageCurrent > pageCount)
{
MessageBox.Show("已经是尾页,请点上一页!", "提示信息");
pageCurrent--;
return;
}

- ffjdd2017-07-29不能用啊,难道我打开方式不对吗

- 粉丝: 138
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 电气自动化技术专业教学团队推荐表.doc
- 2023年公共关系学网络终考题库2.doc
- 移动通信技术的发展.doc
- 计算机网络技术专业培养计划.doc
- 商业计划书(上海润金软件有限公司交易助理项目).doc
- 医学统计学第十六章--Logistic回归分析.ppt
- 基于PLC的自动摆饼机控制系统的设计及实现(顾小强).ppt
- 粤教版网络技术应用教材与教学研讨市公开课一等奖百校联赛特等奖课件.pptx
- 互联网金融个体网络借贷资金存管业务规范.docx
- 解读云计算与云数据存储发展趋势技术研究.doc
- 综合布线建设方案.doc
- 基于C51单片机的数字时钟课程设计C语言,带闹钟.doc
- 谭浩强C语言第13章.ppt
- 大学生网络利用调查报告.doc
- 2023年学员做试卷中小学教师融合教育知识网络竞赛.docx
- 互联网项目商业计划书模板.doc


