XAF之在运行时修改Chart

本文介绍如何使用DevExpress库在C#中动态管理Chart控件,包括创建、修改系列(Series),改变图表风格并保存更改。通过具体实现方法,读者可以了解到如何在不使用向导的情况下灵活地调整图表。

如题,在代码中修改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);
        }
    }
}


XAF(eXpressApp Framework)开发框架中,修改菜单栏名称可以通过多种方式实现,具体取决于菜单项的类型和其定义位置。以下是常见的几种方法: ### 1. 通过模型设计器(Model Editor)修改菜单项名称 XAF 提供了可视化工具 Model Editor,可以用于修改应用程序模型中的各种配置,包括菜单项的名称。 - 打开 Model Editor。 - 导航到 `Application > Main Menu > Items`。 - 选择要修改的菜单项。 - 在属性窗口中,更改 `Caption` 属性值为新的菜单名称。 该方法适用于静态菜单项,即在模型中定义的菜单项[^2]。 ### 2. 动态修改菜单项名称(通过代码) 如果菜单项是动态生成的,或者需要根据运行条件更改菜单项名称,则可以通过代码实现。 在模块或控制器中,重写 `OnActivated` 方法,并通过 `Frame.GetController<MenuBarController>()` 获取菜单控制器,然后遍历菜单项并修改其名称。 示例代码如下: ```csharp public class MyModule : ModuleBase { public override void Setup(XafApplication application) { base.Setup(application); application.CreateCustomFormTemplate += Application_CreateCustomFormTemplate; } private void Application_CreateCustomFormTemplate(object sender, CreateCustomFormTemplateEventArgs e) { var menuBarController = e.Frame.GetController<MenuBarController>(); if (menuBarController != null) { foreach (var item in menuBarController.MenuItems) { if (item.Id == "YourMenuItemId") { item.Caption = "New Menu Name"; } } } } } ``` 此方法适用于需要在运行动态更改菜单项名称的场景。 ### 3. 本地化方式修改菜单项名称 如果需要支持多语言,可以通过本地化资源文件修改菜单项名称。 - 在项目中添加本地化资源文件(如 `Model.xafml`)。 - 在资源文件中找到对应的菜单项 ID,并设置其 `Caption` 属性为新的名称。 - 在运行XAF 会根据当前语言环境自动加载相应的资源。 此方法适用于多语言支持的应用程序。 ### 4. 修改主菜单的根项名称 如果需要修改主菜单的根项(如“文件”、“编辑”等),可以通过模型编辑器中的 `Application > Main Menu` 节点进行调整。 - 打开 Model Editor。 - 导航到 `Application > Main Menu`。 - 修改 `Caption` 属性以更改主菜单根项的名称。 ### 5. 自定义菜单项的显示名称 如果菜单项是通过业务类生成的(例如,通过 `IModelApplicationNavigationItems` 接口),可以通过实现 `IModelNodeUpdater<IModelApplicationNavigationItems>` 接口来动态更新菜单项名称。 示例代码如下: ```csharp public class MyModelNodeUpdater : IModelNodeUpdater<IModelApplicationNavigationItems> { public void UpdateNode(IModelApplicationNavigationItems node) { foreach (var item in node.Items) { if (item.Id == "YourMenuItemId") { item.Caption = "New Menu Name"; } } } } ``` 然后在模块中注册该更新器: ```csharp public override void AddModelNodeUpdaters(ModelNodeUpdaterContext context) { context.NodeUpdaters.Add(new MyModelNodeUpdater()); } ``` 此方法适用于基于业务模型生成的菜单项。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值