.hasChanges() results in records flagged for Delete to not actually get deleted when .saveChanges() executes.
I found the same behaviour on a LiveDemo example that checks .hasChanges(): Grid - Binding to Telerik ClientDataSource
Steps to reproduce:
- Make any change to the first record, such as modifying the Contact Name.
- On the second record, Click the "x" under the DELETE column to mark it for delete.
- Click any column heading to sort. (This calls a UserAction event handler that calls .hasChanges())
- Choose to Cancel at the popup prompt.
- Click "Save changes".
- Monitor the browser console, you will find that webservice UpdateCustomers is called, but DeleteCustomers is not.