Dos Tablas y sus relaciones en un DataGridView a traves de un 'ComboBoxColumn'
Ejemplo de cómo añadir una columna de selección unida a una tabla de ‘maestros’ y relacionada con su identificador en la tabla ‘detalles’, en casos reales solo teneis que substituir las tablas por los ‘sources’ de las tablas en vuestra BD.
Me gustara recibir vuestros comentarios... ;-)

Imports System
Imports System.Data
Public Class Form1
Private dataGridView1 As New DataGridView()
Private Sub Form1_Load() Handles Me.Load
'
' Simular tabla con los Detalles
'
Dim Detalles As New DataTable("Detalle")
Detalles.Columns.Add("Actividad")
Detalles.Columns.Add("Nombre")
Detalles.Columns.Add("Telefono")
Detalles.Rows.Add("001", "Pep Lluis", "231.321.321")
Detalles.Rows.Add("002", "Luis Franco", "Internacional")
Detalles.Rows.Add("003", "Marc Rubiño", "111.222.333")
Detalles.Rows.Add("004", "Javier Conesa", "91.244.32.32")
'
' Simular tabla con los Id's Maestros
'
Dim Maestros As New DataTable("Maestro")
Maestros.Columns.Add("Actividad")
Maestros.Columns.Add("Descripcion")
Maestros.Rows.Add("001", "POgramaor")
Maestros.Rows.Add("002", "Torero")
Maestros.Rows.Add("003", "Banderillero")
Maestros.Rows.Add("004", "ANALista")
'
' Construir el DS y establecer relaciones
'
Dim MiDataSet As New DataSet
MiDataSet.Tables.Add(Detalles)
MiDataSet.Tables.Add(Maestros)
MiDataSet.Relations.Add("Actividad", _
MiDataSet.Tables("Maestro").Columns("Actividad"),_
MiDataSet.Tables("Detalle").Columns("Actividad"))
'
' Añadir una columna 'ComboBox'
' Conteniendo la tabla 'Maestro'
'
Dim MiBoxColumn As New DataGridViewComboBoxColumn
MiBoxColumn.DisplayMember = "Descripcion"
MiBoxColumn.ValueMember = "Actividad"
MiBoxColumn.DataPropertyName = "Actividad"
MiBoxColumn.DataSource = MiDataSet.Tables("Maestro")
Me.dataGridView1.Columns.Add(MiBoxColumn)
'
' Visualizar el DGV con la columna combo 'Maestro'
' y las columnas y tablas de 'Detalle'
'
Me.dataGridView1.Dock = DockStyle.Fill
Me.Controls.Add(dataGridView1)
Me.dataGridView1.DataSource = MiDataSet.Tables("Detalle")
End Sub
End Class
Si os interesa en determinadas situaciones podeis "camuflar" el combo para que tenga un aspecto como este :

De esta forma no podran modificar ni desplegar las opciones y su aspecto sera como el de cualquier otra columna.
Ajustando las propiedades :
MiBoxColumn.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing
MiBoxColumn.ReadOnly = True
Saludos,
Pep Lluis,
PD. Agradecemos la participacion de los actores secundarios (Javier, Luis i Marc), aunque tengo mis dudas sobre si son personajes reales o ficticios ;-)