Te lo digo en palabras para ver si te oriento:
lo que tenes que hacer primero es crear columna por columna y no cargar la grilla con el datasource directamente.
Cita: Me.dgvcompra.DataSource = Ds.Tables("ocompra")
ESTO NO VA SI QUERES HACERLO MANUALMENTE.
la segunda columna tiene que ser de tipo combobox.
despues tenes que hacer un foreach de columna por columna e ir llenando los datos. Una vez que llegas a la del combo, deberias filtrarlo segun la accion que deseas.
Espero haberte orientado un poco.