Dos grid DataGridView en relación maestro - detalle

Problema: Tengo dos grid, donde el primero muestra los datos maestros principales, y el segundo grid, debe cambiar los datos, dependiendo de la fila seleccionada del maestro, con el detalle respectivo.

Solución: Utilizar la habilidad de relación de un dataset.

Para explicar mejor, pongo un ejemplo.

Tengo mi formulario llamado Form1, el cual contiene dos grid, GridMaestro y GridDetalle.

Todo la programación lo realizo en el load del formulario.

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Creo un dataset que va a contener las tablas maestro - detalle
        Dim ds As New DataSet

        'Creo los binding que relacionen a los grid
        Dim maestroBinding As New BindingSource
        Dim detalleBinding As New BindingSource

        'Creo la tabla maestro y lo lleno con datos
        Dim tablaMaestro As DataTable = ds.Tables.Add("tablaMaestro")
        tablaMaestro.Columns.Add("unico")
        tablaMaestro.Columns.Add("dato")
        tablaMaestro.Rows.Add(1, "AAA")
        tablaMaestro.Rows.Add(2, "BBB")
        tablaMaestro.Rows.Add(3, "CCC")

        'Creo el grid detalle y lo lleno con datos
        Dim tablaDetalle As DataTable = ds.Tables.Add("tablaDetalle")
        tablaDetalle.Columns.Add("unico")
        tablaDetalle.Columns.Add("relacion")
        tablaDetalle.Columns.Add("dato")
        tablaDetalle.Rows.Add(1, 1, "AAA-AAA")
        tablaDetalle.Rows.Add(2, 1, "BBB-AAA")
        tablaDetalle.Rows.Add(3, 1, "CCC-AAA")
        tablaDetalle.Rows.Add(1, 2, "AAA-BBB")
        tablaDetalle.Rows.Add(2, 2, "BBB-BBB")
        tablaDetalle.Rows.Add(3, 2, "CCC-BBB")
        tablaDetalle.Rows.Add(1, 3, "AAA-CCC")
        tablaDetalle.Rows.Add(2, 3, "BBB-CCC")
        tablaDetalle.Rows.Add(3, 3, "CCC-CCC")

        'Creo la relacion entre las dos tablas
        Dim columnaMaestro As DataColumn = tablaMaestro.Columns(0)
        Dim columnaDetalle As DataColumn = tablaDetalle.Columns(1)
        Dim relation As DataRelation
        relation = New DataRelation("relacion", columnaMaestro, columnaDetalle)

        'Asigno la relacion al dataset
        ds.Relations.Add(relation)

        'Relaciono el Binding Maestro al dataset
        maestroBinding.DataSource = ds
        maestroBinding.DataMember = "tablaMaestro"

        'Asigno el binding del maestro al detalle e identifico la relacion
        detalleBinding.DataSource = maestroBinding
        detalleBinding.DataMember = "relacion"

        'Asigno los grid a los binding
        GridMaestro.DataSource = maestroBinding
        GridDetalle.DataSource = detalleBinding
End Sub

La belleza aquí es la relación asignada al detalleBinding, el cual hace que al cambiar las filas en el maestro, se actualice la información en el detalle.