以下提供一个示例来说明如何在 WinForms 中实现分页功能,并在分页中实现数据修改并保存的操作。

首先,我们需要一个包含数据源的 DataGridView 控件,并添加上一页、下一页等操作控件来实现分页功能。

接下来,我们需要实现数据的加载、分页、修改和保存功能。

这里我将提供一个简单的例子:

using System;
using System.Data;
using System.Windows.Forms; namespace DataGridViewPagination
{
public partial class Form1 : Form
{
private DataTable originalDataTable; // 原始数据表
private DataTable currentPageDataTable; // 当前页数据表
private int pageSize = 10; // 每页显示的数据条数
private int currentPageIndex = 1; // 当前页索引 public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{
// 模拟加载数据
LoadData(); // 显示第一页数据
ShowData();
} private void LoadData()
{
// 模拟加载数据源
originalDataTable = new DataTable();
originalDataTable.Columns.Add("ID", typeof(int));
originalDataTable.Columns.Add("Name", typeof(string)); // 添加一些示例数据
for (int i = 1; i <= 100; i++)
{
originalDataTable.Rows.Add(i, "Name " + i);
}
} private void ShowData()
{
// 计算起始索引和结束索引
int startIndex = (currentPageIndex - 1) * pageSize;
int endIndex = Math.Min(startIndex + pageSize - 1, originalDataTable.Rows.Count - 1); // 创建一个新的数据表,用于存储当前页的数据
currentPageDataTable = originalDataTable.Clone(); // 填充新的数据表
for (int i = startIndex; i <= endIndex; i++)
{
currentPageDataTable.ImportRow(originalDataTable.Rows[i]);
} // 将新的数据表绑定到 DataGridView 控件
dataGridView1.DataSource = currentPageDataTable; // 更新分页信息
labelPageInfo.Text = $"Page {currentPageIndex}/{GetTotalPages()}, Records {startIndex + 1}-{endIndex + 1} of {originalDataTable.Rows.Count}";
} private int GetTotalPages()
{
// 计算总页数
return (int)Math.Ceiling((double)originalDataTable.Rows.Count / pageSize);
} private void btnPrevious_Click(object sender, EventArgs e)
{
// 显示上一页数据
if (currentPageIndex > 1)
{
currentPageIndex--;
ShowData();
}
} private void btnNext_Click(object sender, EventArgs e)
{
// 显示下一页数据
if (currentPageIndex < GetTotalPages())
{
currentPageIndex++;
ShowData();
}
} private void btnSave_Click(object sender, EventArgs e)
{
// 保存修改
SaveChanges();
} private void SaveChanges()
{
// 确保DataGridView绑定了数据源
if (dataGridView1.DataSource == null || !(dataGridView1.DataSource is DataTable))
{
return;
} // 获取当前页的数据表
DataTable pageDataTable = (DataTable)dataGridView1.DataSource; // 将修改后的数据保存到原始数据表中
foreach (DataRow row in pageDataTable.Rows)
{
DataRow originalRow = originalDataTable.Rows.Find(row["ID"]); // 假设有一个唯一标识为ID的列
if (originalRow != null)
{
originalRow.ItemArray = row.ItemArray;
}
} // 提示保存成功或执行其他保存操作
MessageBox.Show("Changes saved successfully."); // 重新加载数据,刷新当前页的DataGridView
ShowData();
}
}
}

在这个例子中,我们创建了一个包含 ID 和 Name 列的 DataTable 作为数据源,然后在 Form_Load 事件中加载数据,并在 ShowData 方法中实现了分页功能。上一页和下一页按钮分别触发了 btnPrevious_Click 和 btnNext_Click 事件来切换页码并显示相应的数据。保存按钮则触发了 btnSave_Click 事件来保存修改后的数据。

在 SaveChanges 方法中,我们遍历了当前页的数据表,将修改后的数据保存到原始数据表中,并重新加载数据来刷新当前页的 DataGridView。

这个例子是一个简单的实现,实际应用中你可能需要根据具体需求进行调整和扩展。

winform控件 datagridview分页功能 界面实现需要有上一页下一页等操作控件 dataGridView1 控件的数据绑定方式 如何实现分页中的数据修改然后进行保存 请列出详细例子 特别保存部分的更多相关文章

  1. ThinkPHP 自动创建数据、自动验证、自动完成详细例子介绍(十九)

    原文:ThinkPHP 自动创建数据.自动验证.自动完成详细例子介绍(十九) 1:自动创建数据 //$name=$_POST['name']; //$password=$_POST['password ...

  2. Unity上一页下一页切换功能实现源码(仅供参考)

    在做项目时我们有时需要实现切换上一页下一页图片,切换上一首下一首歌曲等等类似的功能.这里写了个简单的实现源码(仅供参考),要是有更好的方法欢迎提出来,共同进步~ 以切换上一页下一页图片为例: usin ...

  3. C# Winform学习---MDI窗体的设计,PictureBox控件(图片上一页下一页),Timer控件,MenuStrip控件

    一.MDI窗体的设计 1.MDI简介 MDI(Multiple Document Interface)就是所谓的多文档界面,与此对应就有单文档界面 (SDI), 它是微软公司从Windows 2.0下 ...

  4. Django--实现分页功能,并且基于cookie实现用户定制每页的数据条数

    # page_num 当前页数, total_result_num 总共有多少条测试结果 def pagination(request, page_num, total_result_num, res ...

  5. Arduino 极速入门系列 - 光控灯(2) - 关于开关,上拉、下拉电阻那些事

    接上篇,这次继续讲解光控灯的另外两个组成部分 - 开关和光敏电阻,光控灯里面将会有自锁开关按钮和光敏电阻.这此主要给新玩电子的朋友解释一下开关按钮的做法. 开关按钮的引脚电平读取问题 - 新手专用 我 ...

  6. jsp实现上一页下一页翻页功能

    前段时间一直忙于期末考试和找实习,好久没写博客了. 这段时间做了个小项目,包含了翻页和富文本编辑器Ueditor的两个知识点,Ueditor玩的还不是很深,打算玩深后再写篇博客. 要实现翻页功能,只需 ...

  7. DEDEcms手机网站添加详情内页上一页/下一页的翻页功能

    修改文件include/arc.archives.class.php文件. 1.搜索 function GetPreNext($gtype='') 2.将这个函数的所有内容替换为 function G ...

  8. 六、js创建页码器:分页、上一页下一页、省略页码

    表格数据太多,需要做成分页.因此需要写一个页码器. 1,初始化页码 获取数据之后渲染页码器,页码器初始化,小于6页的全部展示,否则展示前四页,后面是省略号,最后展示尾页.默认选中第一页,禁用前一页的箭 ...

  9. GridView利用PagerTemplate做分页显示设置上一页下一页转到下拉转页

    效果如图: 代码如下: aspx页: <asp:GridView ID="GridViewMain" runat="server" OnPageIndex ...

  10. css -- 映像 ,分页(上一页下一页)

    1.映像:-webkit-box-reflect:blow 2px -webkit-gradient( linear, left top, left bottom, from(transparent) ...

随机推荐

  1. mysql restart

    bin/mysqld --defaults-file=/etc/mysql.cnf --user=mysql bin/mysqld --user=app --basedir=/opt/mysql-5. ...

  2. 离线yum安装k8s(直接yum安装k8s)快速部署

    问题:如何在没有离线环境上服务器yum安装k8s环境? 环境:准备一台互联网的服务器+离线的服务器 写的比较简便........ 1.互联网服务操作添加阿里云YUM的软件源 cat > /etc ...

  3. 配置YUM源出现Errno 14 Could not open/read repomd.xml 或者 "Couldn't open file /mnt/cdrom/repodata/repomd.xml" 错误的解决办法

    报错信息: [root@tcljr-jdh-uat007 yum.repos.d]# yum makecache Loaded plugins: fastestmirror Loading mirro ...

  4. Qt/C++开发经验小技巧296-300

    使用QDir::setCurrent设置当前目录后,会影响程序中的所有相对目录的执行,导致可能的意外发生,一般相对目录都默认是可执行文件所在目录,所以如果程序中为了特殊处理临时调用了QDir::set ...

  5. Qt编写地图综合应用60-覆盖物坐标和搜索

    一.前言 地图应用中有时候需要开启悬浮工具栏,用户可以直接在地图上绘制矩形.多边形.圆形.线条等,于是需要提供一个函数接口,能够获取到用户绘制的这些图形形状对应的信息.比如坐标点.圆形的中心点和半径. ...

  6. Qt编写可视化大屏电子看板系统23-模块1产量汇总

    一.前言 大屏系统采用结构模块化的分层设计思路,一个表对应一个最小模块比如模具产量.零件产量,数据库采集的时候采集对应的表,拿到数据后按照对应的数据规则传给控件绘制,其中模具产量.零件产量两个模块采用 ...

  7. spark (六) RDD算子(operator)

    目录 1 转换算子(transformer)(将旧的RDD包装成新RDD) 1.1 单值类型 1.1.1 map 1.1.2 mapPartition 1.1.3 mapPartitionsWithI ...

  8. G1原理—2.G1是如何提升分配对象效率

    大纲 1.G1的对象分配原理是怎样的 2.深入分析TLAB机制原理 3.借助TLAB分配对象的实现原理是什么 4.什么是快速分配 + 什么是慢速分配 5.大对象分配的过程 + 与TLAB的关系 6.救 ...

  9. WPF 怎么利用behavior优雅的给一个Datagrid添加一个全选的功能

    前言:我在迁移旧项目代码的时候发现别人写很多界面都涉及到一个DataGrid的全选,但是每个都写的很混乱,现在刚好空闲下来,写一个博客, 给部分可能不太会写这个的同学讲一下,怎么实现全选功能,并且可以 ...

  10. 基于生成式AI的访问控制, 迁移传统安全策略到基于LLM的风险分类器

    基于规则的风险分类 风险分类是网络安全系统的核心能力之一,它将访问请求和命令映射到其风险级别/类别:高(High).中(Medium).低(Low).目前,即便是在大规模环境中,风险分类器仍主要采用基 ...