Condividi tramite


Serializzazione del grafico

La serializzazione rappresenta il processo di conversione dei grafici in uso in un formato che sia possibile salvare o trasmettere.In genere, la serializzazione viene utilizzata per salvare le proprietà di un grafico, ma può essere utilizzata anche per recuperare i dati e caricarli in un controllo chart esistente.

Durante la serializzazione dei dati di un grafico, vengono serializzate solo le proprietà che contengono valori non predefiniti.

Formato dei dati serializzati

È possibile serializzare i dati in un file XML o in un file binario.Quando si salvano o si caricano dati utilizzando un oggetto derivato da StringReader, StringWriter, XMLReader o XMLWriter, è necessario utilizzare il formato XML per i dati.

Il formato predefinito per i dati è XML.Per salvare e caricare i dati in formato binario, impostare la proprietà Format su SerializationFormat.Binary.

Salvataggio e caricamento di dati

Per salvare le proprietà di un grafico, utilizzare il metodo Save dell'oggetto Chart.Serializer.Per caricare i dati serializzati nel controllo chart, utilizzare il metodo Load.

Per impostazione predefinita, l'oggetto Chart.Serializer salva e carica tutte le proprietà del grafico.Entrambi i metodi Save e Load vengono sottoposti a overload per consentirne l'utilizzo con un numero di oggetti diversi.

Nell'esempio di codice riportato di seguito vengono illustrati il salvataggio e il caricamento dei dati di un grafico.

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

Nell'esempio di codice riportato di seguito viene illustrato come utilizzare oggetti derivati da XMLReader e XMLWriter per il caricamento e il salvataggio dei dati di un grafico.

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

Serializzazione dei dati di stato (ASP.NET)

Se si utilizza la proprietà ViewStateData per la gestione dello stato, è inoltre possibile utilizzare i metodi Load e Save dell'oggetto Serializer per salvare e caricare uno stato di visualizzazione definito dall'utente.È necessario utilizzare StringReader per leggere i dati nel controllo e StringWriter per scrivere i dati serializzabili nella proprietà ViewStateData.

Nell'esempio di codice riportato di seguito viene illustrato come utilizzare StringReader e StringWriter per salvare e caricare i dati serializzati.

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

Impostazione delle proprietà del grafico da serializzare

Per specificare quali proprietà serializzare, utilizzare le proprietà Content o SerializableContent, o entrambe, in Chart.Serializer.

La proprietà Content consente di specificare la categoria delle proprietà del grafico da serializzare, mentre la proprietà SerializableContent rappresenta un elenco separato da virgole di tutte le proprietà del grafico da serializzare.Tali proprietà si applicano a tutte le operazioni di caricamento, salvataggio e ripristino.

Importante

La proprietà Content utilizza internamente SerializableContent inserendo caratteri jolly per le proprietà.Se si desidera utilizzare queste due proprietà in combinazione, assicurarsi di concatenare la stringa SerializableContent con sé stessa, per mantenere le impostazioni effettuate nella proprietà Content.

Per specificare quali proprietà non devono essere serializzate, utilizzare la proprietà NonSerializableContent nello stesso modo in cui è usata la proprietà SerializableContent.

Talvolta una proprietà può essere impostata sia per essere serializzata che per non esserlo.In tal caso, il processo di serializzazione risolverà le inconsistenze nel modo descritto di seguito.

  • Le proprietà denominate hanno la precedenza sulle proprietà con caratteri jolly.Ad esempio, se la proprietà SerializableContent è impostata su "*.BackColor" e la proprietà NonSerializableContent è impostata su "ChartArea.BackColor", verranno serializzate tutte le proprietà BackColor, eccetto quelle relative agli oggetti ChartArea.

  • Altrimenti, SerializableContent ha la precedenza su NonSerializableContent.

Nell'esempio di codice riportato di seguito viene illustrato come serializzare su disco i dati relativi all'aspetto del grafico e alle etichette degli assi e successivamente caricare i dati serializzati.

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

Ripristino delle proprietà del grafico sui valori predefiniti

Per ripristinare, in un qualsiasi momento, tutte le proprietà di un grafico, utilizzare il metodo Reset.

Per impostazione predefinita, il metodo Load della serializzazione ripristina sui rispettivi valori predefiniti tutte le proprietà non serializzate, incluso le proprietà serializzabili ma non serializzate.Ciò può causare la perdita di dati se si utilizza il metodo Save e immediatamente dopo il metodo Load.Per modificare questo comportamento, impostare la proprietà ResetWhenLoading su False, in modo che il metodo Load non ripristini alcuna proprietà contenente valori non predefiniti.

Importante

È necessario porre attenzione nel ricaricare le proprietà delle raccolte.Se elementi specifici in Chart.Series o Chart.ChartAreas sono salvati in modo permanente, il salvataggio e il successivo immediato caricamento del grafico, con la proprietà ResetWhenLoading impostata su True, causerà l'eliminazione dal grafico di tutte le serie o di tutti gli elementi dell'area grafico.

Vedere anche

Riferimenti

System.Windows.Forms.DataVisualization.Charting

System.Web.UI.DataVisualization.Charting

Altre risorse

Utilizzo di controlli Chart