You can also handle the CurrentCellDirtyStateChanged event which gets called whenever a value is changed, even if it's not commited. To get the selected value in the list, you would do something like:
var newValue = dataGridView.CurrentCell.EditedFormattedValue;