Events not always firing in DataGridView to run DataAdapter.Update

As the title suggests, I have a DataGridView control that has data populated on the fly. It is bound to a DataBindingSource which is then bound to the DataGridView. I've manually set my UPDATE, INSERT and DELETE commands and everything works perfectly. If I set the DataAdapter.Update to a Button_Click event, everything works perfectly as expected - all the data is updated, deleted or inserted into the database correctly.

The application needs to update "on-the-fly" ideally, so no button push required to save the data. So I've set the update to fire on the DataGridView_RowLeave event so that everytime the row is modified, removed or inserted, when leaving the row it will fire the update event.

Private Sub DataGridView_RowLeave(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView.RowLeave
    Call saveDataTable()
End Sub

Public Sub saveDataTable()
    DataAdapter.Update(Form.BindingSource.DataSource)
End Sub

The problem is, this only seems to occur half of the time. Sometimes leaving the row results in the UPDATE command not firing or inserting the data. It means that not all changes are captured. I have so far managed to confirm that if I click another control in my Form, the Row is still in the "Entered" state in the control, so this won't fire the RowLeave event. Aside from that, it seems to be almost entirely at random when it does fire.

This leads me to believe that this particular event is probably a bad choice for producing the behaviour I'm expecting. With this in mind, what event should I use to ensure that any data deleted, added or updated is always fired as soon as it's changed, without overloading the server and having it update on every single keystroke?