在单个文件中保存并打开多个DiagramControls
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在单个文件中保存并打开多个DiagramControls相关的知识,希望对你有一定的参考价值。
在我的应用程序中,我显示了两个图表控件,即一个用于前卡,一个用于后卡。现在添加任意数量的形状,线条和图像。我还添加了一个仪表板设计器表单以及数据源。我想将此图表控件,具有数据源属性和其他自定义属性(如具有原始数据类型和自定义数据类型的自定义类)的数据源属性的仪表板设计器保存在单个文件中作为模板,然后在打开该单个模板文件时,图控件,仪表板设计器和其他属性都将像以前一样加载所有形状,线条和图像。
答案
为了保存多个图表控件和连接属性,我创建了自己的类,该类具有保存这些信息的成员,例如
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();
现在打开此模板文件,应用相反的过程,以图的方式加载其控件,并以其属性连接参数。
以上是关于在单个文件中保存并打开多个DiagramControls的主要内容,如果未能解决你的问题,请参考以下文章
如何在 R 中迭代以同时保存多个文件并避免“absolute_path(target) 中的错误:'x' 必须是单个字符串”?
oracle sql (toad) - 执行多个查询,保存到单个 excel 文件