Solución: Crear una nueva celda tipo combo box y reemplazarlo por el original.
Sabemos que antes de llenar el grid con los datos, debemos primero llenar los datos de la columna combo box, y luego, pasar los datos al grid, caso contrario nos dará un bonito error de que el combo box no está relacionado con nuestros datos.
Pero cuando tenemos datos de tipo grupo - subgrupo, en donde dependiendo del grupo cambia la información del subgrupo, se debe crear un mecanismo para que, a la hora de editar la información, la segunda columna combo box, cambie con respecto a la selección de la primera.
Existen muchas maneras de hacerlo, sobre todo dependiendo de cómo se esté obteniendo la información y cómo se estén enlazando los datos al combo box.
Se puede encontrar mucha información en la red sobre la manera de realizar este mismo proceso, algunos indican que la manera más práctica es traer toda la información en la segunda columna combo box y filtarlo dependiendo de lo seleccionado.
En mi caso, que la información es demasiado extensa para traerla toda y ponerla dentro de la segunda columna del combo box, he decidido volver a traer la información desde la base de datos con lo seleccionado en el primer combo box y llenar el segundo combo box con la resultante. Esto también sirve de ayuda para que, dependiendo de los datos de una tercera y/o cuarta columna, también se deba realizar el filtro correspondiente.
Para que se entienda mejor mi explicación, voy a poner un poco de código de ejemplo.
Tengo un formulario llamado Form1, el cual contiene un grid llamado DataGridView1, el cual a su vez, tiene dos columnas combo box llamadas dtg_cmb1 y dtg_cmb2
La acción que se dispara al momento en que el usuario selecciona un dato del primer combo box es el CellValueChanged, por lo que iniciaré por allí.
Private Sub DataGridView1_CellValueChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _ Handles DataGridView1.CellValueChanged Dim r As Integer = e.RowIndex Dim c As Integer = e.ColumnIndex Dim dgrow As New DataGridViewComboBoxCell() Select Case c Case 1 'Pregunto si la columna seleccionada pertenece al primer combo box 'Aquí realizo el llenado de los datos, dependiendo de lo seleccionado Using connection As SqlConnection = New SqlConnection(conn) Dim command As New SqlCommand("sp_datos_combobox", connection) command.CommandType = CommandType.StoredProcedure Dim adapter As New SqlDataAdapter(command) With command.Parameters .Add(New SqlParameter("@param1", SqlDbType.Int)).Value = DataGridView1.Rows(r).Cells("dtg_cmb1").Value End With Dim dataCombo As New DataTable adapter.Fill(dataCombo) 'Aqui enlazo los datos al combo box dgrow.DataSource = dataCombo dgrow.DisplayMember = "campo1" dgrow.ValueMember = "campo2" 'Aqui cambio el combo box original, por lo obtenido de la consulta DataGridView1.Item("dtg_cmb2", DataGridView1.CurrentCell.RowIndex) = dgrow End Using End Select End Sub