首页 文章

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

提问于
浏览
1

任何人都可以帮忙..?

我真的需要帮助,这里有两种形式[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 ..?

有任何想法吗...?

提前致谢 .

4 回答

  • 0

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

    • 声明以下变量:

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

    • 在您的计划中执行以下更改:
    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 { }   }
    
  • 0

    您可以简单地声明 dataset/datatableform1 grid 绑定为公共,并在 form2 中访问它 . 通过 datatable or dataset ,您可以再次绑定form2上的网格 .

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

    这是最简单的方法 .

  • 0

    为此目的,你应该使用某种 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<DataGridViewCell>()
                                              .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);
        }
      }
    }
    

    NOTE :我在 is not complete 上面发布的代码,应该添加一些您自己的成员或代码 . 您还应该考虑使用 DataSource 作为您的网格,这就是我们在实际项目中处理 DataGridView 的方式 .

  • 2

    在表单2中声明一个公共 BindingList<row_object> 并从表单1中写入 . 如果表单1中的datagridview绑定到bindingList,则数据将自动刷新 . 请参阅this以查看如何将datagridview绑定到bindingList .

相关问题