【问题标题】:Saving and opening multiple DiagramControls in single file在单个文件中保存和打开多个图表控件
【发布时间】:2020-03-25 17:16:59
【问题描述】:

在我的应用程序中,我展示了两个图表控件,即一个用于前卡,一个用于后卡。现在在添加任意数量的形状、线条和图像之后。我还添加了一个带有数据源的仪表板设计器表单。我想将这个图表控件、带有数据源属性的仪表板设计器和额外的自定义属性(比如我的具有原始数据类型和自定义数据类型的自定义类)作为模板保存在单个文件中,然后当我打开该单个模板文件时,图表控件、仪表板设计器和其他属性都将像以前一样加载所有形状、线条和图像。

【问题讨论】:

  • 这个模板基本上需要保存为Xml/Binary Serialization,然后在打开的时候使用XML/Binary反序列化。

标签: c# winforms devexpress devexpress-windows-ui


【解决方案1】:

为了保存多个图表控件和连接属性,我创建了自己的类,其中包含保存这些信息的成员,例如

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

现在打开这个模板文件,应用相反的过程加载图表控件及其项目和连接参数及其属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多