Diagrammserialisierung
Als Serialisierung wird die Konvertierung der Diagramme in ein Format bezeichnet, das gespeichert oder übertragen werden kann.Sie wird vor allem zum Speichern von Diagrammeigenschaften verwendet, Sie können mithilfe der Serialisierung jedoch auch Daten abrufen und in ein vorhandenes Diagrammsteuerelement laden.
Bei der Serialisierung von Diagrammdaten serialisiert das Diagramm nur die Eigenschaften mit nicht standardmäßigen Werten.
Format von serialisierten Daten
Sie können Daten entweder in eine XML-Datei oder in eine Binärdatei serialisieren.Beim Speichern oder Laden von Daten mit einem Objekt, das aus StringReader, StringWriter, XMLReader oder XMLWriter abgeleitet wurde, müssen Sie XML als Datenformat verwenden.
Das Standardformat für Daten ist XML.Um Daten im Binärformat zu speichern oder zu laden, legen Sie die Format-Eigenschaft auf SerializationFormat.Binary fest.
Speichern und Laden von Daten
Um Diagrammeigenschaften zu speichern, verwenden Sie die Save-Methode im Chart.Serializer-Objekt.Um serialisierte Daten in das Diagrammsteuerelement zu laden, verwenden Sie die Load-Methode.
Standardmäßig speichert und lädt das Chart.Serializer-Objekt alle Eigenschaften des Diagramms.Sowohl die Save-Methode als auch dieLoad-Methode sind überladen, sodass Sie diese mit einer Vielzahl unterschiedlicher Objekte verwenden können.
Im folgenden Code wird veranschaulicht, wie Sie die Daten eines Diagramms speichern bzw. laden.
' Save to and load from an XML file
Chart1.Serializer.Save("SavedData.xml")
Chart1.Serializer.Load("SavedData.xml")
' Save to and load from a .NET Stream object.
Dim myStream As New System.IO.MemoryStream()
Chart1.Serializer.Save(myStream)
Chart1.Serializer.Load(myStream)
//Save to and load from an XML file
Chart1.Serializer.Save("SavedData.xml");
Chart1.Serializer.Load("SavedData.xml");
// Save to and load from a .NET Stream object.
System.IO.MemoryStream myStream = new System.IO.MemoryStream();
Chart1.Serializer.Save(myStream);
Chart1.Serializer.Load(myStream);
Im folgenden Code wird veranschaulicht, wie Sie aus XMLReader und XMLWriter abgeleitete Objekte zum Laden und Speichern von Diagrammdaten verwenden.
Dim myWriter As New System.XML.XmlTextWriter("c:\MyPersistedData.xml", System.Text.Encoding.ASCII)
Chart1.Serializer.Save(myWriter)
' We initialize the XML reader with data from a file.
Dim myXMLReader As New System.XML.XmlTextReader("c:\MyPersistedData.xml")
Chart1.Serializer.Load(myXMLReader)
System.XML.XmlTextWriter myWriter = new System.XML.XmlTextWriter("c:\\MyPersistedData.xml", System.Text.Encoding.ASCII);
Chart1.Serializer.Save(myWriter);
// We initialize the XML reader with data from a file.
System.XML.XmlTextReader myXMLReader = new System.XML.XmlTextReader("c:\\MyPersistedData.xml");
Chart1.Serializer.Load(myXMLReader);
Serialisieren von Zustandsdaten (ASP.NET)
Wenn Sie die ViewStateData-Eigenschaft für die Zustandsverwaltung verwenden, können Sie die Load-Methode und die Save-Methode des Serializer-Objekts verwenden, um einen benutzerdefinierten Ansichtszustand zu speichern und zu laden.Verwenden Sie StringReader, um die Daten in das Steuerelement einzulesen, und StringWriter, um die serialisierbaren Daten in die ViewStateData-Eigenschaft zu schreiben.
Im folgenden Code wird veranschaulicht, wie Sie mithilfe von StringReader und StringWriter serialisierte Daten speichern und laden.
Dim sw As New System.IO.StringWriter
Chart1.Serializer.Save(sw)
' Initialize the string reader with the data being posted by the client back to the server.
Dim sr As New StringReader(Chart1.ViewStateData)
Chart1.Serializer.Load(sr)
System.IO.StringWriter sw = new System.IO.StringWriter();
Chart1.Serializer.Save(sw);
// Initialize the string reader with the data being posted by the client back to the server.
StringReader sr = new StringReader(Chart1.ViewStateData);
Chart1.Serializer.Load(sr);
Angeben von zu serialisierenden Diagrammeigenschaften
Verwenden Sie zum Angeben der Eigenschaften, die serialisiert werden sollen, die Content-Eigenschaft und/oder die SerializableContent-Eigenschaft in Chart.Serializer.
Die Content-Eigenschaft gibt die Kategorie der zu serialisierenden Diagrammeigenschaften an, während die SerializableContent-Eigenschaft eine durch Trennzeichen getrennte Liste aller zu serialisierenden Diagrammeigenschaften angibt.Diese Eigenschaften werden auf alle Lade-, Speicher- und Rücksetzvorgänge angewendet.
Wichtig
Die Content-Eigenschaft verwendet SerializableContent intern, indem sie Platzhalter für Eigenschaften einfügt.Wenn Sie die beiden Eigenschaften zusammen verwenden möchten, müssen Sie die SerializableContent-Zeichenfolge mit sich selbst verknüpfen verkettet, damit die Einstellungen in der Content-Eigenschaft beibehalten werden.
Verwenden Sie zum Angeben der Eigenschaften, die nicht serialisiert werden sollen, die NonSerializableContent-Eigenschaft auf die gleiche Weise wie die SerializableContent-Eigenschaft.
Eine Eigenschaft kann teilweise so konfiguriert werden, dass sie sowohl serialisiert als auch nicht serialisiert wird.Der Serialisierungsprozess behebt die Inkonsistenzen in diesem Fall wie folgt:
Benannte Eigenschaften haben Vorrang vor Eigenschaftenplatzhaltern.Wenn beispielsweise SerializableContent auf "* .BackColor" und NonSerializableContent auf "ChartArea.BackColor" festgelegt ist, werden alle BackColor-Eigenschaften mit Ausnahme von ChartArea-Objekten serialisiert.
Andernfalls hat SerializableContent Vorrang vor NonSerializableContent.
Im folgenden Code wird veranschaulicht, wie Sie die Darstellungsdaten und die Achsenbezeichnungen des Diagramms auf dem Datenträger serialisieren und wie Sie diese serialisierten Daten anschließend laden.
' Save chart appearance properties that have non-default values, as well as axis labels.
Chart1.Serializer.Content = SerializationContent.Appearance
' Concatenate the Content property string and the SerializableContent string
Chart1.Serializer.SerializableContent += ",DataPoint.AxisLabel,Series.AxisLabels,Series.Name,ChartArea.Name"
' Exclude all chart BackColor properties
Chart1.Serializer.NonSerializableContent = *.BackColor"
' Save the chart data
Chart1.Serializer.Save("AppearanceProps.xml")
' Load the serialized data.
Chart1.Serializer.Content = SerializationContent.Appearance
Chart1.Serializer.SerializableContent += ",DataPoint.AxisLabel,Series.AxisLabels,Series.Name,ChartArea.Name"
Chart1.Serializer.Load("AppearanceProps.xml")
// Save chart appearance properties that have non-default values, as well as axis labels.
Chart1.Serializer.Content = SerializationContent.Appearance;
// Concatenate the Content property string and the SerializableContent string
Chart1.Serializer.SerializableContent += ",DataPoint.AxisLabel,Series.AxisLabels,Series.Name,ChartArea.Name";
// Exclude all chart BackColor properties
Chart1.Serializer.NonSerializableContent = *.BackColor";
// Save the chart data
Chart1.Serializer.Save("AppearanceProps.xml");
// Load the serialized data.
Chart1.Serializer.Content = SerializationContent.Appearance;
Chart1.Serializer.SerializableContent += ",DataPoint.AxisLabel,Series.AxisLabels,Series.Name,ChartArea.Name";
Chart1.Serializer.Load("AppearanceProps.xml");
Zurücksetzen von Diagrammeigenschaften auf Standardwerte
Mit der Reset-Methode können Sie jederzeit alle Eigenschaften eines Diagramms zurücksetzen.
Standardmäßig setzt die Load-Methode für die Serialisierung alle Eigenschaften, die nicht serialisiert sind, auf die gespeicherten Standardwerte zurück, einschließlich serialisierbaren Eigenschaften, die jedoch nicht serialisiert wurden.Dies kann zur Folge haben, dass Daten verloren gehen, wenn Sie die Save-Methode unmittelbar gefolgt von der Load-Methode verwenden.Um dies zu ändern, legen Sie die ResetWhenLoading-Eigenschaft auf False fest, sodass die Load-Methode keine Eigenschaften auf nicht standardmäßige Werte zurücksetzt.
Wichtig
Beim erneuten Laden von Auflistungseigenschaften ist Vorsicht geboten.Wenn bestimmte Elemente in Chart.Series oder Chart.ChartAreas beibehalten werden und Sie das Diagramm speichern und unmittelbar erneut laden, während ResetWhenLoading auf True festgelegt ist, werden alle Reihen- oder Diagrammbereichselemente aus dem Diagramm gelöscht.
Siehe auch
Referenz
System.Windows.Forms.DataVisualization.Charting
System.Web.UI.DataVisualization.Charting