您的 GridView 只显示来自 DataTable 的数据,或者更好地显示来自 List 的数据。您需要保存这些数据。事实上你的数据源。要保存您的对象,您需要对其进行深拷贝(如何在 .NET(特别是 C#)中对对象进行深拷贝?)。然后你只需要一个列表来保存不同的版本。如果您使用 memento 设计模式和泛型,您可以为撤消/重做构建一个通用类,您也可以在其他程序或组件中使用它。
也许我的例子可以帮助:
[Serializable()]
public class clsSchnappschuss<T>
{
private MemoryStream mvArbeitspeicherZugriff;
private BinaryFormatter mvFormatierer;
public clsSchnappschuss()
{
if (Attribute.GetCustomAttribute(typeof(T), typeof(SerializableAttribute)) == null)
{
Trace.WriteLine(string.Concat(typeof(T).FullName,
" ist nicht serialisiebar!"));
throw new InvalidOperationException(string.Concat(string.Format("{0} ist nicht serialisierbar.",
typeof(T).FullName),
" Die Klasse muss das Attribut ",
"Serializable einbinden ",
"[Serializable()] ",
"um clsSchnappschuss verwenden zu ",
"können."));
}
mvFormatierer = new BinaryFormatter();
}
public clsSchnappschuss<T> BxSpeichern(T obj)
{
mvArbeitspeicherZugriff = new MemoryStream();
mvFormatierer.Serialize(mvArbeitspeicherZugriff, obj);
return this;
}
public T BxWiederherstellen()
{
mvArbeitspeicherZugriff.Seek(0, SeekOrigin.Begin);
mvFormatierer.Binder = new clsCustomBinder();
T obj = (T)mvFormatierer.Deserialize(mvArbeitspeicherZugriff);
mvArbeitspeicherZugriff.Close();
return obj;
}
}
在这个类中,数据将被存储:
public class clsAufbewahrer<T>
{
private List<clsSchnappschuss<T>> Liste;
public clsAufbewahrer()
{
Liste = new List<clsSchnappschuss<T>>(10);
}
public clsAufbewahrer(int listenKapazität)
{
Liste = new List<clsSchnappschuss<T>>(listenKapazität);
}
public List<clsSchnappschuss<T>> Schnappschuesse
{
get;
set;
}
}