原創(chuàng)|其它|編輯:郝浩|2012-07-04 20:54:27.000|閱讀 585 次
概述:TeeChart可自動的處理所有必須的Serialization步驟,它允許對TeeChart進行保存和調用。它包括圖表及其Series所有修正的元素。TeeChart Series提供了很多您所需的功能,但是在使用Series時,您可能想要將它修改為包括了您自己信息的附加部分,以便將Series公開、生效或被其他應用程序所引用,為了達到此目的,您也許希望從一個TeeChart Serie創(chuàng)建您自己的SeriesType,并添加您自己定義的元素。TeeChart的定制序列化可保存(序列化)及恢復這些元素。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
TeeChart可自動的處理所有必須的Serialization步驟,它允許對TeeChart進行保存和調用。它包括圖表及其Series所有修正的元素。TeeChart Series提供了很多您所需的功能,但是在使用Series時,您可能想要將它修改為包括了您自己信息的附加部分,以便將Series公開、生效或被其他應用程序所引用,為了達到此目的,您也許希望從一個TeeChart Serie創(chuàng)建您自己的SeriesType,并添加您自己定義的元素。TeeChart的定制序列化可保存(序列化)及恢復這些元素。
請注意: 自定義的保存分為2種技術:
定義一個定制Series
現在假設您希望從TeeChart的Line Series中得到一個Series。Line Series包括了您所需的功能,但是您希望添加一些元素來實現追蹤目的或作為增值的項目與任何特定數據集相關聯(lián)。
以下是關于如何定義從一個Line Series得到Custom Series的范例:
public class MyLine : Steema.TeeChart.Styles.Line
{
public MyLine(Chart c) : base(c)
{
myStrVar = "default";
}
public MyLine() : this((Chart)null) { }
private string myStrVar = "";
private int myIntVar = 0;
public string MyStrProp
{
get { return myStrVar; }
set { myStrVar = value; }
}
public int MyIntProp
{
get { return myIntVar; }
set { myIntVar = value; }
}
}
保存及導入
您可以填充您的自定義變量并保存圖表,當重新導入已保存的圖表時這些自定義變量也會被導入。如果該變量是已知系統(tǒng)類型那么則不需要進行額外的步驟。TeeChart將會處理序列化和反序列化。
Eg. 保存已修改Series的圖表
private void button1_Click(object sender, EventArgs e)
{
MyLine mLine=new MyLine();
mLine.MyStrProp = "now set";
mLine.MyIntProp = 43;
tChart1.Series.Add(mLine);
mLine.FillSampleValues();
tChart1.Export.Template.Save(@"c:\files\customLine.ten");
}
導入已修改Series的圖表
private void button2_Click(object sender, EventArgs e)
{
tChart1.Clear();
tChart1.Import.Template.Load(@"c:\files\customLine.ten");
label1.Text = ((MyLine)(tChart1[0])).MyStrProp;
label2.Text = ((MyLine)(tChart1[0])).MyIntProp.ToString();
}
Label1 和Label2 將在保存圖表前顯示設定的值。
通過定制對象來定義Custom Series
通過使用定制項目的元素創(chuàng)建Custom Series類似于使用已知類型的元素來創(chuàng)建Serie。
下面是從Line Series得到一個Series的范例,Line Series包括了已知及未知類型(MyObj)的新元素。由于TeeChart不知道如何序列化和反序列化未知類型的Serie,所有我們需要提供一個您可通過寫程序來實現它的方法,并在序列化/反序列化時調用該方法。 該方法是通過繼承Steema.TeeChart.Export.TemplateExport.ICustomSerialization 接口中的類來實現. 該方法要求在你的類中添加兩個方法:
- public void Serialize(SerializationInfo info)
- public void DeSerialize(SerializationInfo info)
using Steema.TeeChart.Export;
// Custom Line class
public class MyLine : Steema.TeeChart.Styles.Line, TemplateExport.ICustomSerialization
{
public MyLine(Chart c) : base(c)
{
myStrVar = "default";
}
public MyLine() : this((Chart)null) { }
private string myStrVar = "";
private int myIntVar = 0;
private MyObj myMyObj;
public string MyStrProp
{
get { return myStrVar; }
set { myStrVar = value; }
}
public int MyIntProp
{
get { return myIntVar; }
set { myIntVar = value; }
}
/// <summary>
/// Method to ease population of the myMyObj variable.
/// </summary>
public void setMyObj(int i, string s)
{
myMyObj = new MyObj(i, s);
}
/// <summary>
/// Property of Custom type, MyObj
/// </summary>
public MyObj MyObj
{
get { return myMyObj; }
set { myMyObj = value; }
}
/// <summary>
/// Obligatory method (TemplateExport.ICustomSerialization interface)
/// </summary>
public void Serialize(SerializationInfo info)
{
//save custom elements
info.AddValue("myObjStr", myMyObj.MyString, myMyObj.MyString.GetType());
info.AddValue("myObjInt", myMyObj.MyInt);
}
/// <summary>
/// Obligatory method (TemplateExport.ICustomSerialization interface)
/// </summary>
public void DeSerialize(SerializationInfo info)
{
//recover custom elements into the myMyObj variable
myMyObj = new MyObj(info.GetInt32("myObjInt"), info.GetString("myObjStr"));
}
}
//custom object
public class MyObj
{
private string myString;
private int myInt;
public MyObj(int i, string s)
{
myString = s;
myInt = i;
}
public int MyInt
{
get { return myInt; }
set { myInt = value; }
}
public string MyString
{
get { return myString; }
set { myString = value; }
}
}
注意序列化使用 'info.AddValue'來保存自定義元素的值。反序列化根據所要保存變量的類型使用'info.Getxxxx'。
保存及導入
一旦您已經在您定制的類中填充程序,用來實現序列化及反序列化您自定義元素,那么就前面所描述的未更改圖表來說,圖表保存及加載可通過相同的方式來調用,
Eg.
保存已修改Series的圖表
private void button1_Click(object sender, EventArgs e)
{
MyLine mLine=new MyLine();
mLine.MyStrProp = "now set";
mLine.MyIntProp = 43;
mLine.setMyObj(43, "set val 43");
tChart1.Series.Add(mLine);
mLine.FillSampleValues();
tChart1.Export.Template.Save(@"c:\files\customLine.ten");
}
導出已修改Series的圖表
private void button2_Click(object sender, EventArgs e)
{
tChart1.Clear();
tChart1.Import.Template.Load(@"c:\files\customLine.ten");
label1.Text = ((MyLine)(tChart1[0])).MyStrProp;
label2.Text = ((MyLine)(tChart1[0])).MyIntProp.ToString();
label3.Text = ((MyLine)(tChart1[0])).MyObj.MyInt.ToString();
label4.Text = ((MyLine)(tChart1[0])).MyObj.MyString;
}
Label1, Label2, Label3 及Label4 將在保存圖表前顯示設定的值。
該步驟必須從這些適用的Custom Series來自定義的圖表。
從Steema.TeeChart.Chart派生您的自定義圖表,將它標記為Serializable,并將其設為ICustomSerialization類(見以下示例)。就如上面的Series范例,對已知類型的序列化不需要進行任何步驟。對于未知的類型,我們將使用與Series 范例MyObj中相同的對象,
例如:有已知和未知自定義變量的示例圖表
[System.Serializable()]
public class MyChart : Steema.TeeChart.Chart, TemplateExport.ICustomSerialization
{
private MyObj myMyObj;
public MyChart() : base() { }
//required constructor
protected MyChart(SerializationInfo info, StreamingContext context) : base(info, context) { }
private string myStrVar = "";
private int myIntVar = 0;
public string MyStrProp
{
get { return myStrVar; }
set { myStrVar = value; }
}
public int MyIntProp
{
get { return myIntVar; }
set { myIntVar = value; }
}
public void setMyObj(int i, string s)
{
myMyObj = new MyObj(i, s);
}
public MyObj MyObj
{
get { return myMyObj; }
set { myMyObj = value; }
}
//required method
public void Serialize(SerializationInfo info)
{
object o = myMyObj.MyString;
info.AddValue("myObjStr", o, o.GetType());
info.AddValue("myObjInt", myMyObj.MyInt);
}
//required method
public void DeSerialize(SerializationInfo info)
{
myMyObj = new MyObj(info.GetInt32("myObjInt"), info.GetString("myObjStr"));
}
}
在保存圖表時Serialisation可自動進行處理。
例如:序列化
private void button1_Click(object sender, EventArgs e)
{
MyChart myChart = new MyChart();
myChart.Series.Add(new Steema.TeeChart.Styles.Bar());
myChart[0].FillSampleValues();
myChart.setMyObj(22, "set 22");
myChart.MyStrProp = "set String Prop";
myChart.Export.Template.IncludeData = true;
myChart.Export.Template.Save(@"c:\files\customChart.ten");
}
反序列化要求一個額外的步驟,TeeChart的反序列要求MyChart與序列化圖表綁定,而不是默認類型的圖表。
注意設置綁定的代碼:
myChart.Import.Template.CustomType = myChart.ToString();
例如:反序列化
private void button2_Click(object sender, EventArgs e)
{
MyChart myChart = new MyChart();
myChart.Import.Template.CustomType = myChart.ToString();
myChart = (MyChart)(myChart.Import.Template.Load(@"c:\files\customChart.ten"));
myChart.Header.Text = myChart.MyObj.MyString;
myChart.Footer.Text = myChart.MyStrProp;
myChart.Footer.Visible = true;
myChart.Export.Template.Save(@"c:\files\testCustomChartmodded.ten");
myChart.Export.Image.PNG.Save(@"c:\files\testCustomChart.png");
}
本站文章除注明轉載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都控件網