Llenar un DataGridView a partir de un SP (procedimiento almacenado) de una base de datos [Versión VB.Net]

Problema: Mi amada Alondra me ha hecho ver que no tengo una entrada que explique directamente cómo llenar un DataGridView desde un select o un SP (procedimiento almacenado), sino que lo tengo enredado en diferentes entradas, así que para esté contenta, explicaré paso a paso como hacerlo.
Solución: La que explico a continuación.

Necesito llenar mi DataGridView con los datos que tengo en diferentes tablas de mi base de datos, por lo que el select es un poquito complejo y no puedo crearlo directamente con un DataTable tipado, así que tengo que hacerlo por código.

Voy a suponer que mi select sería algo así:

select campo1, campo2, campo3
from tablaA, tablaB
where relacionA1 = relacionB2

Obviamente por la complejidad de mi select, decido ponerlo en un SP, el cual por ejemplo, me quedaría así:

create procedure sp_prueba
        @variable int
as

select campo1, campo2, campo3
from tablaA, tablaB
where relacionA1 = relacionB2
and restriccionB1 = @variable

GO

Esa fue la parte que tengo que realizar en mi base de datos, ahora la parte del Visual Basic .Net.

Tengo mi formulario creado llamado Form1, el cual contiene un DataGridView llamado DataGridView1 junto con los campos necesarios creados en modo diseño.

Ahora creo un procedimiento para llenar este grid.

Private Sub Llenar_DataGridView()
        'Los argumentos de conexión a la base de datos 
        Dim args As String = "Data Source=;" & _ 
                "Initial Catalog=;Integrated Security=SSPI"

        'Abro la conexión
        Using connection As SqlConnection = New SqlConnection(args)
                Dim command As SqlCommand
                Dim adapter As SqlDataAdapter
                Dim dtTable As DataTable
               
                'Indico el SP que voy a utilizar
                command = New SqlCommand("sp_prueba", connection)
                command.CommandType = CommandType.StoredProcedure
                adapter = New SqlDataAdapter(command)
                dtTable = New DataTable
                With command.Parameters
                        'Envió los parámetros que necesito
                        .Add(New SqlParameter("@variable", SqlDbType.Int)).Value = valor
                End With
                Try
                        'Aquí ejecuto el SP y lo lleno en el DataTable
                        adapter.Fill(dtTable)
                        'Enlazo mis datos obtenidos en el DataTable con el grid
                        DataGridView1.DataSource = dtTable
                        'Si no pongo esta línea, se crean automáticamente los campos del grid dependiendo de los campos del DataTable
                        DataGridView1.AutoGenerateColumns = False
                        'Aquí le indico cuales campos del select de mi SP van con los campos de mi grid
                        With DataGridView1
                                .Columns("Campo1").DataPropertyName = "campo1"
                                .Columns("Campo2").DataPropertyName = "campo2"
                                .Columns("Campo3").DataPropertyName = "campo3"
                        End With
                Catch expSQL As SqlException
                        MsgBox(expSQL.ToString, MsgBoxStyle.OkOnly, "SQL Exception")
                        Exit Sub
                End Try
        End Using
End Sub

Este procedimiento lo llamo desde el load de la aplicación.

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Llenar_DataGridView()
End Sub

Y listo, con esto, los datos de mi select se mostrarán en el grid de mi aplicación.

¿Quedó claro mi linda Alondra? Muchos besitos para ti.