为了保存多个图表控件和连接属性,我创建了自己的类,其中包含保存这些信息的成员,例如
public class TemplateClass
{
public string[] DiagramControlsXMLs;
public string SqlDataSourceXML { get; set; }
public string TemplateName { get; set; }
///add more other properties
}
然后在保存模板的时候,暂时保存图表控件,并将其内容存储在 TamplateClass 字符串变量中,如
//save it with temporary name
diagControlA.SaveDocument(strTempFileName);
string strXML = "";
if (File.Exists(strTempFileName))
{
//read XML based diagram control file
strXML = File.ReadAllText(strTempFileName);
File.Delete(strTempFileName);
}
if (objTemplate.DiagramControlsXMLs == null)
objTemplate.DiagramControlsXMLs = new string[0];
Array.Resize(ref objTemplate.DiagramControlsXMLs, objTemplate.DiagramControlsXMLs.Length + 1);
objTemplate.DiagramControlsXMLs[objTemplate.DiagramControlsXMLs.Length - 1] = strXML;
还要保存连接属性,暂时保存其对应的XML,像模板类变量一样加载
XElement objXE = GM.objDataSources.objSqlDataSource.SaveToXml();
objXE.Save(strTempFileName);
if (File.Exists(strTempFileName))
{
//store Sql Data source xml string
objTemplate.SqlDataSourceXML = File.ReadAllText(strTempFileName);
File.Delete(strTempFileName);
}
最后将模板类对象序列化为基于json的字符串,并按名称和扩展名将其保存为文件
DataContractJsonSerializer objJS = new DataContractJsonSerializer(typeof(TemplateClass));
MemoryStream objMS = new MemoryStream();
objJS.WriteObject(objMS, objTemplate);
string str = Encoding.Default.GetString(objMS.ToArray());
using (StreamWriter objSW = new StreamWriter(strTemplateFilePath, false))
{
objSW.Write(str);
objSW.Close();
}
现在打开这个模板文件,应用相反的过程加载图表控件及其项目和连接参数及其属性。