EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

如何:在报告中显示非持久对象

本主题介绍如何基于非持久数据创建报表,该报表不是使用ORM数据模型从数据库中查询的。这有助于分析和报告从动态运行时计算,存储过程,任意SQL查询或第三方服务获得的数据。为了能够在这种情况下使用Reports V2模块,您将需要在非持久类的帮助下定义数据结构,然后使用NonPersistentObjectSpace.ObjectsGetting事件创建所需的对象实例。在如何:显示导航主题中的非持久对象的列表视图中演示了类似的方法。

  • 声明一个非持久类(例如MyNonPersistentObject),并使用DomainComponentAttributeVisibleInReportsAttribute属性对其进行修饰。

    using DevExpress.ExpressApp.DC;
    using DevExpress.Persistent.Base;
    // ...
    [DomainComponent, VisibleInReportsAttribute]
    public class MyNonPersistentObject {
        public string Name { get; set; }
    }
    
    注意

    INotifyPropertyChanged的IXafEntityObjectIObjectSpaceLink接口实现在本实施例中被略去。但是,建议在实际应用程序中支持这些接口(请参阅业务类非持久对象中的PropertyChanged事件)。

  • 在Visual Studio中创建预定义的静态报表,或在运行时使用MyNonPersistentObject作为报表的数据类型创建报表。

    在Visual Studio中,将CollectionDataSource组件的DataSourceBase.ObjectTypeName属性设置为MyNonPersistentObject。

    NonPersistenReportVS

    在运行时,在“报表向导”的“数据类型”组合框中选择MyNonPersistentObject

    NonPersistenReportVS

    重点

    ViewDataSource不应与非持久数据一起使用。始终使用CollectionDataSource

    如果现在预览创建的报告,它将不显示任何数据。继续查看如何填充MyNonPersistentObject集合。

  • 打开WinApplication.csWinApplication.vb),WebApplication.csWebApplication.vb)和/或MobileApplication.csMobileApplication.vb)代码。确保NonPersistentObjectSpaceProvider已在重写的CreateDefaultObjectSpaceProvider方法中注册(除了现有的XPObjectSpaceProviderEFObjectSpaceProvider之外)。当前,此代码是由“解决方案向导”自动添加的,但是如果您使用较旧版本的XAF创建了项目,则可能会丢失该代码。

    protected override void CreateDefaultObjectSpaceProvider(CreateCustomObjectSpaceProviderEventArgs args) {
        // ...
        args.ObjectSpaceProviders.Add(new NonPersistentObjectSpaceProvider(TypesInfo, null));
    }
    
  • 创建一个窗口控制器。在重写的OnActivated方法中,订阅XafApplication.ObjectSpaceCreated事件。在事件处理程序中,如果ObjectSpaceCreatedEventArgs.ObjectSpace属于NonPersistentObjectSpace类型,请订阅NonPersistentObjectSpace.ObjectsGetting事件并根据需要填充e.Objects集合。

    using DevExpress.ExpressApp;
    // ...
    public class NonPersistentClassWindowController : WindowController {
        public NonPersistentClassWindowController()
            : base() {
            TargetWindowType = WindowType.Main;
        }
        protected override void OnActivated() {
            base.OnActivated();
            Application.ObjectSpaceCreated  = Application_ObjectSpaceCreated;
        }
        private void Application_ObjectSpaceCreated(Object sender, ObjectSpaceCreatedEventArgs e) {
            if (e.ObjectSpace is NonPersistentObjectSpace) {
                ((NonPersistentObjectSpace)e.ObjectSpace).ObjectsGetting  = ObjectSpace_ObjectsGetting;
            }
        }
        private void ObjectSpace_ObjectsGetting(Object sender, ObjectsGettingEventArgs e) {
            if (e.ObjectType == typeof(MyNonPersistentObject)) {
                BindingList<MyNonPersistentObject> objects = new BindingList<MyNonPersistentObject>();
                for (int i = 1; i < 10; i  ) {
                    objects.Add(new MyNonPersistentObject() { Name = string.Format("Object {0}", i) });
                }
                e.Objects = objects;
            }
        }
        protected override void OnDeactivated() {
            base.OnDeactivated();
            Application.ObjectSpaceCreated -= Application_ObjectSpaceCreated;
        } 
    }
    

结果显示在下图中。

NonPersistenReportWin

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