Clicar no dado da tabela e exibir os dados dele

Eu estou programando em C# (Csharp) eu tenho uma tabela DataGridView, onde nela eu tenho meus dados do SQL , onde tem a lista dos meus clientes.

Eu queria, por exemplo : onde eu estiver selecionado, eu abrisse outra janela com os outros códigos deste cliente.

Não sei como e quais códigos, alguém pode me ajudar?

Eu uso sempre uma classe que significa uma lista de valores, e fico trabalhando com ela em memória!

Csharp (C#) Code:

Classe Base:

public class Cliente
{
	public int Id { get; set; }
	public string Nome { get; set; }
	public string Endereco { get; set; }
} 

Código Formulário 1:


using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void BtnFechar_Click(object sender, EventArgs e)
        {
            Close();
        }

        public ICollection<Cliente> Clientes;
        private void Form1_Load(object sender, EventArgs e)
        {
            Cliente c1 = new Cliente() { Id = 1, Nome = "Cliente 1", Endereco = "Rua 1" };
            Cliente c2 = new Cliente() { Id = 2, Nome = "Cliente 2", Endereco = "Rua 2" };
            Clientes = new List<Cliente>
            {
                c1, c2
            };


            dataGridView1.DataSource = Clientes;
            dataGridView1.Update();
        }

        private void dataGridView1_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (e != null && e.RowIndex > -1)
            {
                Selecionar(e.RowIndex);
            }
        }

        private void dataGridView1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
        {
            if (e != null && e.KeyData == Keys.Enter)
            {
                int? rowIndex = dataGridView1.CurrentCell?.RowIndex;
                if (rowIndex.HasValue)
                {
                    Selecionar(rowIndex.Value);
                }
            }
        }
        private void Selecionar(int rowIndex)
        {
            if (rowIndex > -1)
            {
                int Id = (int)(dataGridView1.Rows[rowIndex].Cells[0].Value);

                Cliente clienteEscolhido = Clientes.Where(c => c.Id == Id).FirstOrDefault();
                if (clienteEscolhido != null)
                {
                    Form2 frm = new Form2(clienteEscolhido);
                    frm.ShowDialog();
                }
                else
                {
                    MessageBox.Show("Erro", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        
    }
}

Formulário 1:


Código Formulário 2:


using System;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form2 : Form
    {
        private Cliente Cliente;
        public Form2(Cliente cliente)
        {
            InitializeComponent();
            Cliente = cliente;
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            if (Cliente != null)
            {
                TId.Text = $"{Cliente.Id}";
                TNome.Text = Cliente.Nome;
                TEndereco.Text = Cliente.Endereco;
            }
        }

        private void BtnFechar_Click(object sender, EventArgs e)
        {
            Close();
        }
    }
}

Formulário 2:

Sendo que no formulário 1 possui toda as lista de clientes e no formulário 2 quando você der um double_click no formulário 1 ou enter na linha (cell) ele abre o formulário 2 com as informações adicionais.

Esse exemplo é uma das maneiras, como você não foi bem especifico e não adicionou nenhum código na sua pergunta acarreta muito de não sabemos o que está fazendo … !!!