I don't get it. Let me see what you trying to do. When a user opens a new form, you copy the dataset so that you can have a copy in a case when and if the user changes his mind? right.
What I would do is that, instead of copying that chuck of data over and over again, utilize the build-in functionality to accept or to reject the changes as the user makes his mind
Look at
DataSet.RejectChanges[
^]
DataSet.AcceptChanges[
^]