Partager via


Sérialisation de graphiques (contrôles Chart)

La sérialisation est le processus de conversion de vos graphiques en un format que vous pouvez enregistrer ou transmettre. Vous l'utilisez généralement pour enregistrer les propriétés d'un graphique, mais vous pouvez également l'utiliser pour récupérer des données et les charger dans un contrôle Chart existant.

Lors de la sérialisation des données d'un graphique, le graphique sérialise uniquement les propriétés ayant une valeur autre que celle par défaut.

Format des données sérialisées

Vous pouvez sérialiser des données en fichier XML ou binaire. Lors de l'enregistrement ou du chargement de données à l'aide d'un objet dérivé de StringReader, StringWriter, XMLReader ou XMLWriter, vous devez utiliser XML comme format des données.

Le format par défaut pour les données est XML. Pour enregistrer et charger des données au format binaire, affectez à la propriété Format la valeur SerializationFormat.Binary.

Enregistrement et chargement de données

Pour enregistrer des propriétés de graphique, utilisez la méthode Save de l'objet Chart.Serializer. Pour charger des données sérialisées dans le contrôle Chart, utilisez la méthode Load.

Par défaut, l'objet Chart.Serializer enregistre et charge toutes les propriétés enregistrées et chargées du graphique. Les méthodes Save et Load sont toutes deux surchargées pour vous permettre de les utiliser avec différents objets.

Le code suivant montre comment enregistrer ou charger les données d'un graphique.

' 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);

Le code suivant montre comment utiliser des objets dérivés de XMLReader et XMLWriter pour le chargement et l'enregistrement des données du graphique.

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);

Sérialisation de données d'état (ASP.NET)

Si vous utilisez la propriété ViewStateData pour la gestion d'état, vous pouvez également utiliser les méthodes Load et Save de l'objet Serializer pour enregistrer et charger un état d'affichage défini par l'utilisateur. Vous devez utiliser l'objet StringReader pour lire les données dans le contrôle et l'objet StringWriter pour écrire les données sérialisables dans la propriété ViewStateData.

L'exemple de code suivant montre comment utiliser StringReader et StringWriter pour enregistrer et charger des données sérialisées.

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);

Spécification des propriétés de graphique à sérialiser

Pour spécifier les propriétés à sérialiser, utilisez la propriété Content, la propriété SerializableContent ou les deux à la fois, dans Chart.Serializer.

La propriété Content spécifie la catégorie des propriétés de graphique à sérialiser ; la propriété SerializableContent est la liste séparée par des virgules de toutes les propriétés de graphique à sérialiser. Ces propriétés s'appliquent à toutes les opérations de chargement, d'enregistrement et de réinitialisation.

Important

La propriété Content utilise SerializableContent en interne en insérant des caractères génériques de propriété. Si vous souhaitez utiliser les deux propriétés ensemble, veillez à concaténer la chaîne SerializableContent avec elle-même pour conserver vos paramètres dans la propriété Content.

Pour spécifier les propriétés à ne pas sérialiser, utilisez la propriété NonSerializableContent de la même manière que la propriété SerializableContent.

Une propriété peut parfois être définie de façon à être sérialisée et à ne pas l'être. Dans ce cas, le processus de sérialisation résout les incohérences comme suit :

  • Les propriétés nommées sont prioritaires sur les caractères génériques de propriété. Par exemple, si SerializableContent a la valeur "*.BackColor" et que NonSerializableContent a la valeur "ChartArea.BackColor", toutes les propriétés BackColor, à l'exception de celles des objets ChartArea, seront sérialisées.

  • Sinon, SerializableContent est prioritaire sur NonSerializableContent.

Le code suivant montre comment sérialiser les données d'apparence et les étiquettes d'axe du graphique sur disque, puis comment charger ces données sérialisées.

' 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");

Réinitialisation des propriétés du graphique à leur valeur par défaut

Pour réinitialiser à tout moment toutes les propriétés d'un graphique, utilisez la méthode Reset.

Par défaut, la méthode de sérialisation Load réinitialise toutes les propriétés non enregistrées lors de la sérialisation à leur valeur par défaut, notamment les propriétés sérialisables qui ne sont pas sérialisées. Cela peut entraîner la perte de données si vous utilisez la méthode Save, puis immédiatement après la méthode Load. Pour modifier ce comportement, affectez à la propriété ResetWhenLoading la valeur False afin que la méthode Load ne réinitialise aucune propriété à sa valeur par défaut.

Important

La prudence est de mise lorsqu'il s'agit de recharger des propriétés de collection. En effet, si des éléments spécifiques de Chart.Series ou Chart.ChartAreas sont rendus persistants, le fait d'enregistrer et de recharger immédiatement le graphique avec la propriété ResetWhenLoading définie sur True entraîne la suppression du graphique de tous les éléments de série ou de zone de graphique.

Voir aussi

Référence

System.Windows.Forms.DataVisualization.Charting

System.Web.UI.DataVisualization.Charting

Autres ressources

Utilisation de contrôles Chart