c# - 在单个文件中保存和打开多个图表控件
问题描述
在我的应用程序中,我展示了两个图表控件,即一个用于前卡,一个用于后卡。现在在添加任意数量的形状、线条和图像之后。我还添加了一个带有数据源的仪表板设计器表单。我想将这个图表控件、带有数据源属性的仪表板设计器和额外的自定义属性(比如我的具有原始数据类型和自定义数据类型的自定义类)作为模板保存在单个文件中,然后当我打开该单个模板文件时,图表控件、仪表板设计器和其他属性都将像以前一样加载所有形状、线条和图像。
解决方案
为了保存多个图表控件和连接属性,我创建了自己的类,其中包含保存这些信息的成员,例如
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();
}
现在打开这个模板文件,应用相反的过程加载图表控件及其项目和连接参数及其属性。
推荐阅读
- javascript - 休息api jqgrid
- docker - 无法安装asp.net核心开发证书工具(dev-certs)
- php - 如何使用php从键值对中的多维数组中回显值
- spring - 如何使用 Spring Boot WebClient 收集分页 API 响应?
- javascript - 如何在jquery上动态添加数字顺序
- openshift - CLI 监控 OpenShift 中的连接池
- android - 如何用 FusedLocationProviderClient 替换 FusedLocationApi?
- html - 将 SVG 工具提示的悬停区域扩展到其父元素的边界之外
- javascript - 制作搜索功能
- javascript - 使用 reduce 重构函数 - javascript