如何在C#中将值从form2 datagridview复制/传输到form1 datagridview?

任何人都可以帮忙..?

我真的需要帮助,这里有两种forms[form1&form2]。 我已经在每个表单中创建了datagridview(DGV)。 现在我需要通过单击form2上的一个按钮将值从form2 datagridview传输/复制到form1 datagridview。

在form2我写了这个..!

private void button1_Click(object sender, EventArgs e) { try { if (dataGridView1.RowCount != 0) { foreach (DataGridViewRow row in dataGridView1.SelectedRows) { object[] items = new object[row.Cells.Count]; for (int i = 0; i < row.Cells.Count; i++) items[i] = row.Cells[i].Value; Form1 F1 = new Form1(); F1.Activate(); F1.dataGridView1.Rows.Add(items); F1.dataGridView1.DataSource = items; dataGridView1.Rows.Remove(row); } } else { MessageBox.Show("There is no data to export, please verify..!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } catch { } } 

我得到的错误就像“…… dataGridView1.Form1由于其保护级别而无法访问”。 是否有任何其他方法或方法可以将值从form2 datagridview导入到form1 datagridview ..?

有任何想法吗…?

提前致谢。

将Form1的DGV声明为Public而不是private,并在Form2中执行以下操作:

  1. 声明以下变量:

    System.Windows.Forms.Form f = System.Windows.Forms.Application.OpenForms["Form1"];

  2. 在您的计划中执行以下更改:

      private void button1_Click (object sender, EventArgs e) { try { if (dataGridView1.RowCount != 0) { foreach (DataGridViewRow row in dataGridView1.SelectedRows) { ((Form1)f).dataGridView1.Rows.Add(row); } } else { MessageBox.Show("There is no data to export, please verify..!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } catch { } } 

您可以简单地声明将form1 grid绑定为public的dataset/datatable ,并在form2访问它。 通过该datatable or dataset您可以再次绑定form2上的网格。

或者您可以将数据集或数据表从form1发送到form2(可能通过模块化函数),然后绑定网格。

这是最简单的方法。

您应该为此目的使用某种event

 //the Form1 class public partial class Form1 : Form { Form2 f2 = new Form2(); public Form1(){ InitializeComponent(); f2.TransferSelectedRows += (s,e) => { if (dataGridView1.RowCount > 0) { foreach(DataGridViewRow row in dataGridView1.SelectedRows){ //add the selected row to the receiver grid e.ReceiverGrid.Rows.Add(row.Cells.OfType() .Select(cell=>cell.Value).ToArray()); //remove the selected row dataGridView1.Rows.Remove(row); } e.HasRows = true; } else { e.HasRows = false; } }; } } //Form2 class public partial class Form2 : Form { public Form2() { InitializeComponent(); } public class TransferSelectedRowsEventArgs : EventArgs { public DataGridView ReceiverGrid {get; private set;} public bool HasRows {get;set;} public TransferSelectedRowsEventArgs(DataGridView receiver){ ReceiverGrid = receiver; } } public delegate void TransferSelectedRowsEventHandler(object sender, TransferSelectedRowsEventArgs e); public event TransferSelectedRowsEventHandler TransferSelectedRows; protected virtual void OnTransferSelectedRows(TransferSelectedRowsEventArgs e){ TransferSelectedRowsEventHandler handler = TransferSelectedRows; if(handler != null) handler(this, e); } //Click event handler for button1 private void button1_Click(object sender, EventArgs e){ var transfer = new TransferSelectedRowsEventArgs(dataGridView1); OnTransferSelectedRows(transfer); if(!transfer.HasRows){ MessageBox.Show("There is no data to export, please verify..!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } 

注意 :我上面发布的代码不完整 ,应添加您自己的一些成员或代码。 您还应该考虑为Grid使用DataSource ,这就是我们在实际项目中处理DataGridView

在表单2中声明公共BindingList并从表单1中写入。如果表单1中的datagridview绑定到bindingList,则数据将自动刷新。 请参阅此内容以查看如何将datagridview绑定到bindingList。