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。

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

posted @ 2024-05-13 16:40  摩诘  阅读(405)  评论(0编辑  收藏  举报