共用方式為


圖表序列化

序列化是將圖表轉換成可儲存或傳輸之形式的程序。序列化通常用來儲存圖表屬性,但是也可用來擷取資料並將其載入至現有的圖表控制項。

在序列化圖表資料時,圖表只序列化具有非預設值的屬性。

序列化的資料格式

您可以將資料序列化至 XML 或二進位檔案。在使用衍生自 StringReaderStringWriter、XMLReader 或 XMLWriter 的物件儲存或載入資料時,必須使用 XML 做為資料格式。

預設的資料格式為 XML。若要以二進位格式儲存及載入資料,請將 Format 屬性設為 SerializationFormat.Binary

儲存及載入資料

若要儲存圖表屬性,請使用 Chart.Serializer 物件中的 Save 方法。若要將序列化資料載入至圖表控制項,請使用 Load 方法。

根據預設,Chart.Serializer 物件會儲存及載入圖表的所有屬性。SaveLoad 方法都經過多載,可搭配一些不同的物件使用。

下列程式碼示範如何設定儲存或載入圖表的資料。

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

下列程式碼示範如何使用衍生自 XMLReader 和 XMLWriter 的物件來載入及儲存圖表資料。

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

序列化狀態資料 (ASP.NET)

如果使用 ViewStateData 屬性進行狀態管理,同時也可以使用 Serializer 物件的 LoadSave 方法,來儲存及載入使用者定義的檢視狀態。您必須使用 StringReader 將資料讀入控制項,以及使用 StringWriter 將可序列的資料寫入至 ViewStateData 屬性。

下列程式碼示範如何使用 StringReaderStringWriter 來儲存及載入序列化資料。

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

指定要序列化的圖表屬性

若要指定要序列化的屬性,請使用 Chart.Serializer 中的 ContentSerializableContent 屬性 (或兩者)。

Content 屬性指定要序列化之圖表屬性的分類,而 SerializableContent 屬性則是所有要序列化之圖表屬性的逗號分隔清單。這些屬性適用於所有載入、儲存及重設作業。

重要

Content 屬性會透過插入屬性萬用字元,在內部使用 SerializableContent。如果您希望一起使用這兩個屬性,請確定將 SerializableContent 字串與其自身串連,以保留 Content 屬性中的設定。

若要指定不序列化的屬性,請以使用 SerializableContent 屬性的相同方式來使用 NonSerializableContent 屬性。

有時屬性可以同時設為序列化和不序列化。在此情況下,序列化程序會依照下列方式解決不一致:

  • 具名屬性的優先順序高於屬性萬用字元。例如,如果 SerializableContent 設為 "*.BackColor" 而 NonSerializableContent 設為 "ChartArea.BackColor",則會序列化 ChartArea 物件以外的所有 BackColor 屬性。

  • 否則 SerializableContent 的優先順序高於 NonSerializableContent

下列程式碼示範如何將圖表的外觀資料和軸標籤序列化至磁碟,然後載入該序列化資料。

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

將圖表屬性重設為預設值

若要在任何時候重設圖表的所有屬性,請使用 Reset 方法。

根據預設,序列化 Load 方法會將所有未序列化的屬性重設為其預設值,包括未序列化的可序列化屬性。如果您使用 Save 方法,並立即使用 Load 方法,這可能導致資料遺失。若要變更這種行為,請將 ResetWhenLoading 屬性設為 False,讓 Load 方法不會重設任何具有非預設值的屬性。

重要

在重新載入集合屬性時,請務必小心。如果 Chart.SeriesChart.ChartAreas 中的特定項目已保存,那麼儲存並立即以 ResetWhenLoading 設為 True 來重新載入圖表,會使得所有數列或圖表區域項目從圖表中刪除。

請參閱

參考

System.Windows.Forms.DataVisualization.Charting

System.Web.UI.DataVisualization.Charting

其他資源

使用 Chart 控制項