Q: ¿Cómo pasar un DataGridView a otro DataGridView en otro formulario? Tengo dos formularios, Un formulario A y uno B. El Formulario B está cargado desde la BD, lo que quiero es que al seleccionar una fila del formulario B se mande al formulario A
Este es el formulario A:

Este es el formulario B:

De esta manera llamo al formulario B en el botón buscar
Form2 frm = new Form2();
        this.Hide();
        frm.ShowDialog();
        this.Show();

Intenté de esta manera pero no funcionó
 Form1 frm = new Form1();
        for (int i = 0; i < dataGridView1.Rows.Count; i++)
        {
            frm.tblarticulo = dataGridView1;
            frm.tblarticulo.Rows[i].Cells["descripcion"].Value = dataGridView1.CurrentRow.Cells[4].Value.ToString();
            frm.tblarticulo.Rows[i].Cells["cantidad"].Value = dataGridView1.CurrentRow.Cells[5].Value.ToString();
            frm.tblarticulo.Rows[i].Cells["precio"].Value = dataGridView1.CurrentRow.Cells[6].Value.ToString();
            frm.tblarticulo.Rows[i].Cells["valtotal"].Value = dataGridView1.CurrentRow.Cells[7].Value.ToString();

        }

        frm.ShowDialog();
        frm.BringToFront();

¿Me podrían decir cómo puedo pasar los datos?

A: Este es un ejemplo para pasar data entre formularios.
La idea básica seria pasar la data vía constructor.
Comienzo:Tengo un formulario donde esta un datagrid

El codigo es el siguiente.
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 r = new Form2(dataGridView1);
            r.Show();
        }
    }

Básicamente cuando se hace click en el boton "Pasar al 2do", se hace una instancia del segundo formulario. Y basicamente en esto le pasamos el datagridCompleto al formulario2
Form2 r = new Form2(dataGridView1);

Ahora bien, el formulario 2 se ve así:

Ahora vemos el código
public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        public Form2(DataGridView delFormularioA)
        {
            InitializeComponent();
            foreach (DataGridViewRow row in delFormularioA.Rows)
            {
                dataGridView1.Rows.Add();
                dataGridView1.Rows[row.Index].Cells["Column1"].Value = row.Cells[0].Value;                
            }
        }
    }

Entonces si notas tenemos un constructor que recibe el dataGrid del formulario 1.
public Form2(DataGridView delFormularioA).....

Entonces ahora tenemos el datagrid del formulario 1 en el formulario 2 y bastara procesarlo
foreach (DataGridViewRow row in delFormularioA.Rows)
            {
                dataGridView1.Rows.Add();
                dataGridView1.Rows[row.Index].Cells["Column1"].Value = row.Cells[0].Value;                
            }

Ese ciclo toma cada fila del formulario 1 y y agregada una fila al datagrid del formulario2, una vez que se agrega la fila se setea el valor del datagrid en el formulario 2 desde el formulario 1
Ahora vemos el funcionamiento:

El formulario de la derecha aparece cuando le doy al boton "Pasar al 2do"
Espero te sea de ayuda
Cabe destacar que solo seteo un valor por tema de prueba.

A: segun entiendo, necesitas que la info se pase de un formulario hacia otro segun te ubicas en las filas del primer formulario???
en el codigo de tu formulario origen deberias modificar ciertas cosas como por ejemplo :
-poner la propiedad MultiSelect= False para que el usuario no pueda seleccionar mas de una fila.
-agregar un evento en la fila del datagrid, un evento como "CellClick" con eso, vas a desencadenar ese evento cada vez que hagas "clic" en una celda y de esa manera pasar la info o usas el metodo del boto que te describe un compañero arriba.
algo asi te estaría quedando: (Ojo esto es codigo de una aplicacion mía)
Private Sub Cell_Click(ByVal sender As System.Object, ByVal e As 
System.Windows.Forms.DataGridViewRowEventArgs) Handles DataGridView1.CellClick)
i = Me.DataGridView1.Rows.Count
        For j As Integer = 0 To i - 2
                If IsNumeric(Me.DataGridView1.Rows(j).Cells.Item(0).Value) Then
                    Total += Me.DataGridView1.Rows(j).Cells.Item(0).Value
                Else
                    MessageBox.Show("Revise los valores porque alguno es un número no válido")
                End If
            Next j
            Me.lblTotal.Text = Total
        For j As Integer = 0 To i - 2
       Total += Me.DataGridView1.Rows(j).Cells.Item(1).Value
        Next j


End Sub

