XAF之在运行时修改Chart

来源:互联网 发布:java web课程设计 编辑:程序博客网 时间:2024/06/05 08:08

如题,在代码中修改Chart,并将修改保存,不必调用wizard。

可以添加/删除/隐藏series等等,并可改变图表风格.



using System;using System.Text;using System.IO;using DevExpress.ExpressApp.Chart.Win;using DevExpress.ExpressApp.Chart;using DevExpress.XtraCharts;namespace DynamicChartSolution.Module.Win{    public class ChartManagerWin    {        private ChartControl chartControl;        private IModelChartListView chartModel;        private SeriesBuilder builder;        /// <summary>        /// 在ViewController中创建ChartManagerWin的方法:        /// ChartControl cc=(((ListView)View).Editor as ChartListEditor).ChartControl        /// IModelChartListView m=(IModelChartListView)View.Model        /// new ChartManagerWin(cc,m)        /// </summary>        /// <param name="control"></param>        /// <param name="model"></param>        public ChartManagerWin(ChartControl control, IModelChartListView model)        {            this.chartControl = control;            this.chartModel = model;        }        /// <summary>        /// 使用SeriesBuilder创建一个Series        /// </summary>        /// <returns></returns>        public SeriesBuilder GetSeriesBuilder()        {            return builder=new SeriesBuilder();        }        public SeriesBuilder GetSeriesBuilder(string seriesName,DevExpress.XtraCharts.ViewType viewType)        {            return builder=new SeriesBuilder(seriesName, viewType);        }        /// <summary>        /// 将Chart的更改保存到Model中        /// </summary>        /// <param name="model"></param>        public void SaveChanges()        {            MemoryStream ms = new MemoryStream();            chartControl.SaveToStream(ms);            chartModel.ChartSettings.Settings = Encoding.UTF8.GetString(ms.ToArray());        }        /// <summary>        /// 改变chart显示风格        /// </summary>        /// <param name="style"></param>        public void ChangeStyle(DevExpress.XtraCharts.ViewType style)        {            foreach (Series s in chartControl.Series)            {                s.ChangeView(style);            }            SaveChanges();        }        //需要注意的是,如果添加的Series和当前图表风格不同时不会显示        public void AddSeries(params Series[] series)        {            chartControl.Series.AddRange(series);            SaveChanges();        }        public void RemoveSeries(string seriesName)        {            if(chartControl.Series[seriesName]!=null)                chartControl.Series.Remove(chartControl.Series[seriesName]);            SaveChanges();        }        public void SetVisibility(string seriesName,bool visible)        {            chartControl.Series[seriesName].Visible = visible;        }            }    public class SeriesBuilder    {        private Series series;        public Series Series        {            get { return series; }        }        public SeriesBuilder()        {            series = new Series();        }        public SeriesBuilder(string seriesName,DevExpress.XtraCharts.ViewType viewType)        {            series = new Series(seriesName, viewType);        }        public string Name        {            set { series.Name = value; }        }        public DevExpress.XtraCharts.ViewType ViewType        {            set { series.ChangeView(value); }        }        public object DataSource        {            set {  series.DataSource=value; }        }        public string ArgumentDataMember        {            set { series.ArgumentDataMember = value; }        }        public DevExpress.XtraCharts.ScaleType ArgumentScaleType        {            set { series.ArgumentScaleType = value; }        }        public DevExpress.XtraCharts.ScaleType ValueScaleType        {            set { series.ValueScaleType = value; }        }        public string ValueDataMember        {            set { series.ValueDataMembers.AddRange(value); }        }        public string SummaryFunction        {            set { series.SummaryFunction=value; }        }        public void AddDataFilter(string columnName,string columnTypeName,DataFilterCondition condition,object value)        {            series.DataFilters.Add(columnName, columnTypeName, condition, value);        }    }}