las consultas en principio no veo la razon de ser de hacerle un undo/redo, asi que ahi no entro
sobre modificacion de datos (ya sea actualizacion, borrado o insercion):
si es sobre base de datos, create una clase con estructura similar a la tabla que estes modificando (cada columna de la tabla se traduce en una variable de la clase) y luego vas almacenando los valores cambiados/insertados/borrados en una lista a traves de instancias de la clase creada anteriormente.
como consejo: identifica mediante alguna variable si el cambio hecho es insercion, modificacion o borrado. esto facilitara deshacer/rehacer las cosas.
en caso de un borrado, por experiencia, no borraria fisicamente el dato de la BD sino que le pondria un campo de tipo INTEGER (por ejemplo) "estado" cuyos valores sean 0 == borrado y 1 == disponible. esto consigue que si hay que deshacer el borrado no tengas que volver a volcar todos los datos, sino simplemente cambiar el campo "estado" directamente en la BD.
de todas formas, sigues aportando poquitos datos...