You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#、SQL Server及VS2022中传递DataGridView记录到另一窗体

在Visual Studio 2022中跨窗体传递DataGridView数据的基础要点

对于编程新手来说,跨窗体传递DataGridView数据的核心是把Form2控件里的有效数据提取出来,再传递给Form1。下面是几个最基础、易上手的实现方式:

方法1:通过构造函数传递(最常用)

这种方式直接在Form1的构造函数里接收数据,实例化时一次性传入,逻辑清晰不易出错。

  1. 在Form1中定义带参数的构造函数:
public partial class Form1 : Form
{
    public Form1(DataTable gridData)
    {
        InitializeComponent();
        // 将传入的数据绑定到Form1的DataGridView(如果需要显示)
        dataGridView1.DataSource = gridData;
    }
}
  1. 在Form2中触发传递逻辑(比如按钮点击事件):
private void btnPassData_Click(object sender, EventArgs e)
{
    // 提取DataGridView的数据源(假设绑定的是DataTable)
    DataTable sourceData = (DataTable)dataGridView1.DataSource;
    // 复制一份数据避免原数据被意外修改
    DataTable passData = sourceData.Copy();
    
    // 实例化Form1并传入数据
    Form1 targetForm = new Form1(passData);
    targetForm.Show();
}

方法2:通过公共属性传递

如果需要先实例化Form1再传递数据,或者要传递多组数据,用公共属性会更灵活。

  1. 在Form1中定义公共属性:
public partial class Form1 : Form
{
    // 定义公共属性存储传递来的数据
    public DataTable ReceivedData { get; set; }

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        // 在Form1加载时绑定数据
        if (ReceivedData != null)
        {
            dataGridView1.DataSource = ReceivedData;
        }
    }
}
  1. 在Form2中赋值并打开Form1:
private void btnPassData_Click(object sender, EventArgs e)
{
    DataTable passData = ((DataTable)dataGridView1.DataSource).Copy();
    
    Form1 targetForm = new Form1();
    targetForm.ReceivedData = passData;
    targetForm.Show();
}

方法3:通过静态类共享数据

适合多窗体间频繁共享数据的场景,数据存在静态类里,任何窗体都能随时访问。

  1. 创建静态共享类:
public static class SharedDataStore
{
    // 静态属性存储数据
    public static DataTable GridData { get; set; }
}
  1. Form2中存储数据:
private void btnSaveData_Click(object sender, EventArgs e)
{
    SharedDataStore.GridData = ((DataTable)dataGridView1.DataSource).Copy();
}
  1. Form1中读取数据:
private void Form1_Load(object sender, EventArgs e)
{
    if (SharedDataStore.GridData != null)
    {
        dataGridView1.DataSource = SharedDataStore.GridData;
    }
}

关键注意事项

  • 如果你的DataGridView不是绑定DataTable,而是手动添加的行,需要遍历dataGridView1.Rows,把每行数据存入自定义类集合(比如List<MyDataModel>)再传递
  • 传递时尽量用Copy()复制数据,避免引用传递导致Form1修改数据时影响Form2的原数据
  • 确保传递数据时目标窗体的控件已经初始化,避免空引用异常

内容的提问来源于stack exchange,提问作者Urvish Google

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 22:39:20