The only way i found to do this is to have some hidden text boxes holding the original data as the data is changed, then if you click undo it just reloads this back into the boxes, however the issue with that is getting round the fields being bound to a table field. I got round this by not binding them to the fields. but hjaving them populated at runtime, this will depend however on how you are populating them in the first place.
'Clever boy...'