Creo que tu idea no es muy recomendable, ya que, como bien dices, tendrás que cambiar el recordset, y refrescar la grilla cada vez que cambies de columna.
Yo entiendo que te resultará mucho más útil el montar un TDBDropDown para cada columna...
En todo caso, si quieres saber en qué columna estás, en el evento que te interese puedes poner
Código:
Dim nCol As Integer
nCol=TDBGrid1.Col
para saber que estás en la columna nCol.