From this thread http://social.msdn.microsoft.com/Forums/windows/en-US/ca2b3a41-e598-4a84-ac75-57064febd5e5/change-cell-value-in-datagridviewdataerror
The DataError event occurs when an external data-parsing or validation operation throws an exception, or when an attempt to commit data to a data source fails.
Based on it, you can't fix the value here since the value will not be committed. After you changed the correct/default value to the DataGridView Cell, you must commit it. So, set the e.Cancel = false would be OK.
So, just set e.Cancel = false
after you change value and it should work.
Hope this helps