EPR类企业管理系统

在我们现有系统基础上或全新开发,提供定制服务
为您的企业高效快速实施ERP,WMS,MES,CRM管理系统
全面管控物料仓库、销售业务、采购业务、仓库业务
生产过程、质量检验、组织架构、业务报表


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

如何:将自定义列添加到报告列表

本主题描述如何自定义用于存储报表的持久类,以将其他信息与报表对象相关联。例如,添加Category属性将在Reports List视图中增加一个列,最终用户将能够按类别进行分组,排序或过滤。

WinForms:

ReportsV2_WizParamsRuntime

ASP.NET:

ReportsV2_WizParamsRuntime_Web

在本主题中,假定您有一个使用Reports V2 Module的XAF应用程序,并且已经创建了一个或多个报告(请参阅Reports V2 Module Overview)。

注意

移动应用程序不支持报告向导,因此本主题中描述的方法无法在移动平台中实现。

提示

DevExpress代码示例数据库(http://www.devexpress.com/example=T154234)中提供了完整的示例项目。

继承ReportDataV2

实体框架

如果使用实体框架,请创建派生自DevExpress.Persistent.BaseImpl.EF的MyReportDataV2实体。ReportDataV2。然后,将自定义实体添加到DbContext。

public class MyReportDataV2 : DevExpress.Persistent.BaseImpl.EF.ReportDataV2 {
    public string Category { get; set; }
}

public class MySolutionDbContext : DbContext {
    // ...
    public DbSet<ReportDataV2> ReportDataV2 { get; set; }
    public DbSet<MyReportDataV2> MyReportDataV2 { get; set; }
}

XPO

如果使用XPO,请创建派生自DevExpress.Persistent.BaseImpl的MyReportDataV2持久类。ReportDataV2。

public class MyReportDataV2 : DevExpress.Persistent.BaseImpl.ReportDataV2 {
    public MyReportDataV2(Session session) : base(session) { }
    private string category;
    public string Category {
        get { return category; }
        set { SetPropertyValue(nameof(Category), ref category, value); }
     }
}

指定ReportsModuleV2.ReportDataType

应用程序设计器中,将ReportsModuleV2.ReportDataType属性值设置为MyReportDataV2

ReportsV2_ReportDataType

WinApplication.csWinApplication.vb)和WebApplication.csWebApplication.vb)文件重复此步骤。

将新属性添加到报表向导

注意

如果您不希望用户初始化附加属性,则可以省略此部分。相反,您可以自定义ReportsStorage类以更新代码中的属性值。

要使新引入的属性在“报表向导”中可见,请执行以下操作。

  • 在与平台无关的模块项目中,从NewXafReportWizardParameters类继承并声明Category字符串属性。

    using DevExpress.ExpressApp.DC;
    using DevExpress.ExpressApp.ReportsV2;
    using DevExpress.ExpressApp.ReportsV2.Win;
    using DevExpress.XtraReports.UI;
    // ...
    [DomainComponent]
    public class CustomReportWizardParameters : NewReportWizardParameters {
        public CustomReportWizardParameters(XtraReport report, Type reportDataType) : 
            base(report, reportDataType) { }
        public string Category { get; set; }
        public override void AssignData(IReportDataV2Writable reportData) {
            base.AssignData(reportData);
            if (reportData is MyReportDataV2) {
                ((MyReportDataV2)reportData).Category = Category;
            }
        }
    }
    
  • 在WinForms模块项目中,实现一个View Controller。重写OnActivated方法,访问标准WinReportServiceController并订阅其WinReportServiceController.NewXafReportWizardShowing事件。在事件处理程序中,将CustomReportWizardParameters类的实例传递给“报表向导”。

    using DevExpress.ExpressApp;
    using DevExpress.ExpressApp.ReportsV2.Win;
    // ...
    public class ReportWizardModifyController : ViewController {
        WinReportServiceController reportServiceController;
        public ReportWizardModifyController() { }
        protected override void OnActivated() {
            base.OnActivated();
            reportServiceController = Frame.GetController<WinReportServiceController>();
            if (reportServiceController != null) {
                reportServiceController.NewXafReportWizardShowing  =
                    reportServiceController_NewXafReportWizardShowing;
            }
        }
        protected override void OnDeactivated() {
            reportServiceController.NewXafReportWizardShowing -=
                reportServiceController_NewXafReportWizardShowing;
            reportServiceController = null;
            base.OnDeactivated();
        }
        void reportServiceController_NewXafReportWizardShowing(object sender,
            NewXafReportWizardShowingEventArgs e) {
            if (!e.ReportDataType.Equals(typeof(MyReportDataV2))) return;
            CustomReportWizardParameters newReportParamsObject = new
                CustomReportWizardParameters(e.WizardParameters.Report, e.WizardParameters.ReportDataType);
            newReportParamsObject.Category = "Default";
            e.WizardParameters = newReportParamsObject;
        }
    }
    
  • 在ASP.NET模块项目中,再实现一个View Controller。类似地,重写OnActivated方法,访问标准的WebReportServiceController并订阅其WebReportServiceController.NewReportWizardShowing事件。在事件处理程序中,将CustomReportWizardParameters类的实例传递给“报表向导”。

    using DevExpress.ExpressApp;
    using DevExpress.ExpressApp.ReportsV2.Web;
    // ...
    public class ReportWizardModifyController : ViewController {
        WebReportServiceController reportServiceController;
        public ReportWizardModifyController() { }
        protected override void OnActivated() {
            base.OnActivated();
            reportServiceController = Frame.GetController<WebReportServiceController>();
            if (reportServiceController != null) {
                reportServiceController.NewReportWizardShowing  =
                    reportServiceController_NewReportWizardShowing;
            }
        }
        protected override void OnDeactivated() {
            reportServiceController.NewReportWizardShowing -=
                reportServiceController_NewReportWizardShowing;
            reportServiceController = null;
            base.OnDeactivated();
        }
        void reportServiceController_NewReportWizardShowing(object sender,
            WebNewReportWizardShowingEventArgs e) {
            if (!e.ReportDataType.Equals(typeof(MyReportDataV2))) return;
            CustomReportWizardParameters newReportParamsObject = new
                CustomReportWizardParameters(e.WizardParameters.Report, e.WizardParameters.ReportDataType);
            newReportParamsObject.Category = "Default";
            e.WizardParameters = newReportParamsObject;
        }
    }
    

执行上述步骤后,会将以下详细视图添加到应用程序模型中。

  • MyReportData_DetailView
  • CustomReportWizardParameters_DetailView

要将新的“类别”项目放置在所需的位置,请启动“模型编辑器”并调整这些“详细视图”布局。

ReportsV2_WizParams

有关如何自定义详细视图的布局的详细说明,请参阅“视图项目布局自定义”帮助主题。

转载保留此链接,注明出处