with form example ejemplos datos data agregar c# .net winforms datagridview

example - ¿Cómo copiar/transferir valores de form2 datagridview a form1 datagridview en C#..?



datagridview datasource c# (4)

Deberías usar algún tipo de event para este propósito:

//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); } } }

NOTA : El código que publiqué anteriormente no está completo , se deben agregar algunos miembros o un código propio. También debería considerar usar DataSource para su Grid, así es como manejamos DataGridView en proyectos reales.

¿Alguien puede ayudar ...?

Realmente necesito ayuda en esto, aquí tengo dos formularios [formulario1 y formulario2]. He creado datagridview (DGV) en cada formulario. Ahora necesito transferir / copiar valores de form2 datagridview a form1 datagridview haciendo clic en un botón en form2.

en form2 escribí esto ...!

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 { } }

y recibo un error como "... dataGridView1.Form1 es inaccesible debido a su nivel de protección". ¿Hay alguna otra forma o método para importar valores de form2 datagridview a form1 datagridview ..?

algunas ideas...?

gracias por adelantado.


Simplemente puede declarar el dataset/datatable que vincula a su grid form1 como público y acceder a ella en form2 . A través de esa datatable or dataset , puede volver a enlazar la cuadrícula en form2.

O puede enviar un conjunto de datos o una tabla de datos de form1 a form2 (posiblemente a través de una función modular) y luego enlazar la grilla.

Esta es la forma más simple.


Declare el DGV de Form1 como Público en lugar de privado y haga lo siguiente en el Formulario 2:

  1. Declara la siguiente variable:

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

  2. Haga los siguientes cambios en su programa:

    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 { } }


Declare una BindingList<row_object> pública BindingList<row_object> en el Formulario 2 y escríbala desde el Formulario 1. Si la vista de cuadrícula de datos en el Formulario 1 está vinculada a la lista de vinculación, los datos se actualizarán automáticamente. Consulte esto para ver cómo vincular una vista de tabla de datos a una lista de vinculación.