EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

如何:从导航中显示非持久对象的列表视图

本示例演示选择导航项时如何显示非持久对象的列表视图。请注意,此方法仅与客户端数据访问模式兼容。

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

    using DevExpress.ExpressApp.DC;
    using DevExpress.Persistent.Base;
    // ...
    [DomainComponent, DefaultClassOptions]
    public class MyNonPersistentObject {
        // ...
    }
    
    注意

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

  • 在C#/ VB编辑器中打开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.ListViewCreating事件。在事件处理程序中,如果“集合源”的对象类型为MyNonPersistentObject类型,请订阅NonPersistentObjectSpace.ObjectsGetting事件并根据需要填充e.Objects集合。

    using DevExpress.ExpressApp;
    // ...
    public class InitializeNonPersistentListViewWindowController : WindowController {
        public InitializeNonPersistentListViewWindowController() : base() {
            TargetWindowType = WindowType.Main;
        }
        protected override void OnActivated() {
            base.OnActivated();
            Application.ListViewCreating  = Application_ListViewCreating;
        }
        private void Application_ListViewCreating(Object sender, ListViewCreatingEventArgs e) {
            if ((e.CollectionSource.ObjectTypeInfo.Type == typeof(MyNonPersistentObject)) && (e.CollectionSource.ObjectSpace is NonPersistentObjectSpace)) {
                ((NonPersistentObjectSpace)e.CollectionSource.ObjectSpace).ObjectsGetting  = ObjectSpace_ObjectsGetting;
            }
        }
        private void ObjectSpace_ObjectsGetting(Object sender, ObjectsGettingEventArgs e) {
            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.ListViewCreating -= Application_ListViewCreating;
        }
    }
    
    提示

结果显示在下图中。

NonPersistentListViewInNavigation

提示

删除保存操作可用于非持久性对象。若要访问NonPersistentObjectSpace中的所有创建,删除和修改的对象,请使用NonPersistentObjectSpace.ModifiedObjects属性。

相关文章

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