zoukankan      html  css  js  c++  java
  • Charts Controls 开发系列2

    系列目录:  

    • 创建Basic Chart -- Completed
    • 了解Chart State Management -- Completed
    • Chart 外观设置  -- ing
    • Chart 数据加载
    • 。。。 

    了解 Chart State Management

           当我们在使用图表控件开发时,页面经常进行一些postback的操作。如果不了解有关于Chart 的状态管理的方面知识,肯定会遇到问题的。  

    比如说:页面postback之后,图表数据丢失问题?。。。  

    那如何存储页面上的图表相关数据呢?  

    让我们先来了解以下内容  

    • SerializationContents
    • ChartSerializer
    • ViewStateData

     SerializationContents

     主要作用:定义图表序列化的类型

     这个Enum有四种

     1.Appearance
         仅序列化与图表外观有关系的数据内容,如:图表的线的颜色,图表的宽度,高度。。

     2.Data

        仅序列化图表中的Series,不包括与图表外观相关的数据

     3.Default

         仅序列化非默认的图表数据 如:图表数据,图表外表数据
     4.All

        序列化图表中所有的数据

     我们来看看指定不同序列化类型之后生成数据

     

    Appearance:

     //仅序列化图表不包括ChartAreas  

    <Chart BackColor="211, 223, 240" BackGradientStyle="TopBottom"
    BackSecondaryColor="White" BorderColor="26, 59, 105" BorderWidth="2">
    <BorderSkin SkinStyle="Emboss" />
    </Chart>

     

    Data

    代码
    <Chart>
    <Series>
    <Series Name="Google" XValueType="DateTimeOffset" YValueType="Int32">
    <Points>
    <DataPoint YValues="3" AxisLabel="2010-03-12" />
    </Points>
    </Series>
    </Series>
    </Chart>

     

    NonSerializableContent

             语法:"Class.Property[,Class.Property]".  

     

    // 设置 有关于图表的BorderColor不进行序列化
    resultChart.Serializer.NonSerializableContent = *.BorderColor";

      

    ChartSerializer

    主要作用:用于管理用户自定义的View State.

    Serializer Data Format一般分四个种 Stream、String、XmlWriter、TextWriter

      

     1.Stream  

    MemoryStream stream = new MemoryStream();

    resultChart.Serializer.Save(stream);

    resultChart.Serializer.Load(stream);


    2.String

    resultChart.Serializer.Save("ChartData.xml");

    resultChart.Serializer.Load(
    "ChartData.xml"
    );

      

    3.XmlWriter

    代码
    XmlTextWriter xmlWriter = new XmlTextWriter("c:\\ChartData.xml", Encoding.ASCII);

    resultChart.Serializer.Save(xmlWriter);

    XmlTextReader xmlReader
    = new XmlTextReader("c:\\ChartData.xml"
    );

    resultChart.Serializer.Load(xmlReader);

     

    4.TextWriter

    代码
    private void SetDataToViewStateData () {
    using ( var sw = new
    StringWriter () ) {
    resultChart.Serializer.Content
    =
    SerializationContents.Data;
    resultChart.Serializer.Save ( sw );
    resultChart.ViewStateData
    =
    sw.ToString ();
    }
    }

    private void
    GetDataFromViewStateData () {
    try
    {
    if ( null !=
    resultChart.ViewStateData ) {
    using ( var sr = new
    StringReader ( resultChart.ViewStateData ) ) {
    resultChart.Serializer.Content
    =
    SerializationContents.Data;
    resultChart.Serializer.Load ( sr );
    }
    }
    }
    catch
    ( Exception ) {
    // Data Bind Again

    SetDataToViewStateData ();
    }
    }

       

    ViewStateData

         此属性在Framework 3.5中主要是存储序列化数据,而在Framework 4.0中已经Obsolete。  

        MSDN: "ViewStateData has been deprecated. Please investigate Control.ViewState instead."

     

    》Framework 3.5

     

    代码
    using ( var sw = new StringWriter () ) {
    resultChart.Serializer.Content
    =
    SerializationContents.Data;
    resultChart.Serializer.Save ( sw );
    resultChart.ViewStateData
    =
    sw.ToString ();
    }

      

    》Framework 4.0

    Set:          

    代码
    using ( var sw = new StringWriter () ) {
    resultChart.Serializer.Content
    =
    SerializationContents.All;
    resultChart.Serializer.Save ( sw );
    //resultChart.ViewStateData = sw.ToString ();

    ViewState.Add ( "chartViewState" , sw.ToString () );
    }

     

    Get:  

    代码
    var query = from vs in ViewState.Keys.OfType<String> ()
    where vs.Contains ( "chartViewState"
    )
    select ViewState [vs]
    as
    String;
    if ( null !=
    query.Single () ) {
    using ( var sr = new
    StringReader ( query.Single () ) ) {
    resultChart.Serializer.Content
    =
    SerializationContents.All;
    resultChart.Serializer.Load ( sr );
    }
    }

     

    *当然除以上的方式还可以使用其他的方式维护数据状态.

       

    提示

          使用State management时,要记得设置EnableViewState属性为true,此属性默认设置为false.

       

    嗯,差不多了。

  • 相关阅读:
    千峰公开课徐老师讲解前端前沿技术总结
    网站被k到可以使用关键词搜索到首页优化总结
    SEO基础内容
    react项目后台及上线步骤
    超好用的图片压缩工具,推荐给你
    属性title样式自定义
    Vue.js_devtools_5.1.0.zip【需要的可自行下载】
    js异步执行 按需加载 三种方式
    Web安全之跨站脚本攻击(XSS)
    操作数组不要只会for循环
  • 原文地址:https://www.cnblogs.com/RuiLei/p/1690740.html
Copyright © 2011-2022 走看看