winform控件 datagridview分页功能 界面实现需要有上一页下一页等操作控件 dataGridView1 控件的数据绑定方式 如何实现分页中的数据修改然后进行保存 请列出详细例子 特别保存部分
以下提供一个示例来说明如何在 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 控件的数据绑定方式 如何实现分页中的数据修改然后进行保存 请列出详细例子 特别保存部分的更多相关文章
- ThinkPHP 自动创建数据、自动验证、自动完成详细例子介绍(十九)
原文:ThinkPHP 自动创建数据.自动验证.自动完成详细例子介绍(十九) 1:自动创建数据 //$name=$_POST['name']; //$password=$_POST['password ...
- Unity上一页下一页切换功能实现源码(仅供参考)
在做项目时我们有时需要实现切换上一页下一页图片,切换上一首下一首歌曲等等类似的功能.这里写了个简单的实现源码(仅供参考),要是有更好的方法欢迎提出来,共同进步~ 以切换上一页下一页图片为例: usin ...
- C# Winform学习---MDI窗体的设计,PictureBox控件(图片上一页下一页),Timer控件,MenuStrip控件
一.MDI窗体的设计 1.MDI简介 MDI(Multiple Document Interface)就是所谓的多文档界面,与此对应就有单文档界面 (SDI), 它是微软公司从Windows 2.0下 ...
- Django--实现分页功能,并且基于cookie实现用户定制每页的数据条数
# page_num 当前页数, total_result_num 总共有多少条测试结果 def pagination(request, page_num, total_result_num, res ...
- Arduino 极速入门系列 - 光控灯(2) - 关于开关,上拉、下拉电阻那些事
接上篇,这次继续讲解光控灯的另外两个组成部分 - 开关和光敏电阻,光控灯里面将会有自锁开关按钮和光敏电阻.这此主要给新玩电子的朋友解释一下开关按钮的做法. 开关按钮的引脚电平读取问题 - 新手专用 我 ...
- jsp实现上一页下一页翻页功能
前段时间一直忙于期末考试和找实习,好久没写博客了. 这段时间做了个小项目,包含了翻页和富文本编辑器Ueditor的两个知识点,Ueditor玩的还不是很深,打算玩深后再写篇博客. 要实现翻页功能,只需 ...
- DEDEcms手机网站添加详情内页上一页/下一页的翻页功能
修改文件include/arc.archives.class.php文件. 1.搜索 function GetPreNext($gtype='') 2.将这个函数的所有内容替换为 function G ...
- 六、js创建页码器:分页、上一页下一页、省略页码
表格数据太多,需要做成分页.因此需要写一个页码器. 1,初始化页码 获取数据之后渲染页码器,页码器初始化,小于6页的全部展示,否则展示前四页,后面是省略号,最后展示尾页.默认选中第一页,禁用前一页的箭 ...
- GridView利用PagerTemplate做分页显示设置上一页下一页转到下拉转页
效果如图: 代码如下: aspx页: <asp:GridView ID="GridViewMain" runat="server" OnPageIndex ...
- css -- 映像 ,分页(上一页下一页)
1.映像:-webkit-box-reflect:blow 2px -webkit-gradient( linear, left top, left bottom, from(transparent) ...
随机推荐
- Qt/C++地图动态绘制折线多边形矩形圆形标注点/可编辑拖动调整大小和位置
一.前言说明 无论哪一家的地图,都提供了调用函数绘制各种覆盖物,但是有时候的场景是希望进入添加覆盖物模式,然后每次在地图上按下都自动生成对应的覆盖物比如圆形,这样就不需要用户提前知道经纬度坐标等参数, ...
- Qt/C++音视频开发74-合并标签图形/生成yolo运算结果图形/文字和图形合并成一个/水印滤镜
一.前言 在使用yolo做人工智能运算后,运算结果除了一个方框,还可能需要增加文字显示在对应方框上,以便标记是何种物体,比如显示是人还是动物,或者还有可能追踪人员,显示该人员的姓名.这种应用场景非常普 ...
- Qt音视频开发35-左右通道音量计算和音量不同范围值的转换
一.前言 视频文件一般会有两个声音通道及左右声道,值有时候一样有时候不一样,很多场景下我们需要对其分开计算不同的音量值,在QAudioFormat中可以获取具体有几个通道,如果是一个通道,则左右通道值 ...
- Qml 中实现水印工具
[写在前面] 在 Qt 的 Quick 模块中,QQuickPaintedItem 是一个非常有用的类,它允许我们在 Qml 中自定义绘制逻辑. 我们可以通过这种方式实现水印工具,包括在文本.图片或整 ...
- 决策单调性优化 DP
前言 本文将介绍决策单调性优化 DP 的相关内容.持续更新修正,如有差错请指出. 1.四边形不等式优化 DP 1.1 四边形不等式与决策单调性 四边形不等式:如果对于任意的 \(a \le b \le ...
- 深入理解ASP.NET Core 管道的工作原理
在 .NET Core 中,管道(Pipeline)是处理 HTTP 请求和响应的中间件组件的有序集合.每个中间件组件都可以对请求进行处理,并将其传递给下一个中间件组件,直到请求到达最终的处理程序.管 ...
- G1原理—5.G1垃圾回收过程之Mixed GC
大纲 1.Mixed GC混合回收是什么 2.YGC可作为Mixed GC的初始标记阶段 3.Mixed GC并发标记算法详解(一) 4.Mixed GC并发标记算法详解(二) 5.Mixed GC并 ...
- jQuery---操作指南
功能代码(1)---通过Jquery来处理复选框 实现以下功能: 1:选中第一个复选框,那么下面所有的复选框都选中,去除选中第一个复选框,下面的都不选中 2:当点击全选按钮,上面足球.篮球.游泳.唱歌 ...
- streamlit使用技巧
实现上传PDF并显示 ## 上传并预览(1M以内才可预览) def upload_Pre(): file = st.file_uploader("选择待上传的PDF文件", typ ...
- Web访问过程
WEB访问的具体过程: 命令 浏览器中查看DNS chrome://net-internals/#dns 查看本地DNS ipconfig/displaydns 查看HOST文件 C:\Windows ...