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

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

时间:2024-05-13 16:40:59浏览次数:23  
标签:控件 分页 保存 private 一页 数据 DataTable

以下提供一个示例来说明如何在 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。

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

标签:控件,分页,保存,private,一页,数据,DataTable
From: https://www.cnblogs.com/mojiejushi/p/18189521

相关文章

  • WinForm中UI控件不支持从非创建控件的线程进行访问
    背景在WindowsForms应用程序中,UI控件(如按钮、文本框等)被设计为不支持从非创建控件的线程(通常是主UI线程)进行访问。尝试从其他线程访问UI控件会导致不可预测的行为,包括应用程序崩溃。Control.CheckForIllegalCrossThreadCalls属性用于在调试过程中帮助开发者发现这类潜在问......
  • vue3 页面 自适应 高度 分页固定
    <template><divclass="app_box"><divclass="app_box_title"ref="refTile"><el-form:inline="true":model="formInline"class="demo-form-inline"label-......
  • 界面控件开发包DevExpress v23.2.6全新发布|附高速下载
    DevExpress拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpressDashboardeXpressApp框架、适用于VisualStudio的CodeRush等一系列辅助工具。屡获大奖的软件开发平台DevExpress近期重要版本v23.2已正式发布,该版本拥有众多新产品和数十个具有高影响力的功......
  • Ant Design Blazor Table 组件的 自定义分页样式, 显示全部记录数,ShowTotal
    在AntDesignBlazor中,Table 组件的 ShowTotal 属性是一个泛型属性,它可以是两种类型之一:Func<PaginationTotalContext,string> 或 RenderFragment<PaginationTotalContext>。这个属性用于定义如何显示表格数据的总条数。OneOf<T1,T2> 是一个特殊的类型,它表示这个......
  • mfc自定义控件的自动布局
    **CBRS_ALIGN_RIGHT是MFC(MicrosoftFoundationClass)中的一个标志,用于指示控件条可以停靠在框架窗口的客户区域右侧**。 在MFC中,窗口布局和控件的管理是一个重要的功能,尤其是在涉及到用户界面设计时。MFC提供了一套完整的机制来允许开发者创建和管理应用程序的界面,包括控......
  • C#多选下拉菜单自定义控件
    C#在winform项目中多选下拉菜单自定义控件。由 ComboBox和 CheckedListBox组合形成。效果: 自定义控件代码MultiComboBox.csusingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Drawing;usingSystem.Data;usingSystem......
  • 如何通过前端表格控件在10分钟内完成一张分组报表?
    前言:当今时代,报表作为信息化系统的重要组成部分,在日常的使用中发挥着关键作用。借助报表工具使得数据录入、分析和传递的过程被数字化和智能化,大大提高了数据的准确性及利用的高效性。而在此过程中,信息化系统能够实现对数据的实时监控和更新,为管理者提供及时、准确的业务数据,帮助......
  • uniapp 编译成h5,返回上一页之后没有触发生命周期问题
    今天开发测试的时候,无意中发现点击分享链接进去登陆成功返回上一页的时候,页面直接空白了。刚开始的时候,就很奇怪,毕竟分享链接这个功能是好久之前的,不可能无缘无故的出问题来着。开始分析问题,查看网络请求,发现空白页面一个请求都没有发出,不寻常。猜测是不是哪里打了断点导致的。......
  • 设置Winform窗体内控件跟随窗体大小变化而变化
    点击查看代码#region界面放大处理privatefloatx;//窗体大小全局变量privatefloaty;//窗体大小全局变量#region获取控件的width、height、left、top、字体大小值,存放在控件的Tag属性中privatevoidsetTag(Controlcons){//遍历窗体中的控......
  • 界面控件DevExtreme v23.1、v23.2盘点 - 增强的TypeScript(Angular、React、Vue)
    DevExtreme拥有高性能的HTML5/JavaScript小部件集合,使您可以利用现代Web开发堆栈(包括React,Angular,ASP.NETCore,jQuery,Knockout等)构建交互式的Web应用程序。从Angular和Reac,到ASP.NETCore或Vue,DevExtreme包含全面的高性能和响应式UI小部件集合,可在传统Web和下一代移动应用程序中......