Hola lilianamaite01, ya tuve oportunidad de porbar el codigo que te mande y como te comente tenia algunos detalles, por lo que te lo dejo como lo implemente, estoy partiendo o suponiendo que al menos ya tienes tu DataGridView con la columna combobox cargada con los codigos, entonces toma el codigo que te pongo e implementalo a tus necesidades, le hice dos cambios.
El primero.
Todo esot va en el Evento "CellValueChanged" como ya lo hemos hecho.
Código VB.NET:
Ver originalIf DataGridView1.Columns(e.ColumnIndex).Name = "codigo" Then
Dim combo As DataGridViewComboBoxCell = TryCast(DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex), DataGridViewComboBoxCell)
'Yo converti el valor del combo a string por que asi lo necesitaba, tu lo convertirias a integer o el formato que tengas en tu tabla.
Dim valor As String = combo.Value.ToString
sqlcon.Open()
Dim sqlstring As String = "SELECT * FROM PRODUCTO WHERE CODIGO_PRODUCTO= @id" 'Aqui al parametro ponle la arroba
Dim cmd As New SqlCommand(sqlstring, sqlcon)
cmd.Parameters.AddWithValue("@id", valor)
Dim reader As SqlDataReader = cmd.ExecuteReader()
If reader.Read() Then
'Aqui uno de los cambios para agregar los datos en la columna correspondiente, yo solo tome dos datos, tu tomaras los necesarios.
DataGridView1.Rows(e.RowIndex).Cells("desc").Value = reader("Art_Descripcion")
DataGridView1.Rows(e.RowIndex).Cells("precio").Value = reader("Art_UltimoCosto")
End If
End If
'Segundo, agregamos al evento "CurrentCellDirtyStateChanged" para que no se espere a que termines la edicion de la fila para arrojarte los datos
If DataGridView1.IsCurrentCellDirty Then
DataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit)
End If
Espero te sirva.
Saludos.....