EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

在主对象的视图中显示引用对象的属性

默认情况下,当前对象类型的属性显示在视图中。但是,您可能需要为使用引用属性声明的相关对象公开的属性添加编辑器。本主题描述了可用于显示此类关联对象的属性的不同方法。

本主题中使用以下ProjectTask业务类。

using DevExpress.Persistent.Base;
using System.ComponentModel;
using System.Collections.Generic;
// ...
[DefaultClassOptions]
public class Project {
    [Browsable(false)]
    public int ProjectID { get; protected set; }
    public string ProjectName { get; set; }
    public DateTime? Deadline { get; set; }
    public virtual IList<Task> Tasks { get; set; }
}
[DefaultClassOptions]
public class Task {
    [Browsable(false)]
    public int TaskID { get; protected set; }
    public string Subject { get; set; }
    public string Description { get; set; }
    public virtual Project Project { get; set; }
}

尽管这些类是Entity Framework Code-First实体,但是您可以对XPO持久性类使用相同的方法。

应用ExpandObjectMembers属性

当将ExpandObjectMembersAttribute应用于引用属性时,相关对象的所有属性都将添加到当前对象类型的“列表”视图和“详细视图”的模型中。

using DevExpress.Persistent.Base;
// ...
public class Task {
    // ...
    [ExpandObjectMembers(ExpandObjectMembers.Always)]
    public virtual Project Project { get; set; }
}

结果,Project类的所有可见属性都将添加到“任务视图”(“应用程序模型”中的“视图” |“ <ListView>” |“视图” |“ <DetailView>” |“项”节点)。下图以红色突出显示了新列和查看项。

WaysToDisplayRef_ExpandObjectMembers

可以在“模型编辑器”中删除不必要的列/项目。

您可以传递ExpandObjectMembers枚举的其他值,以仅将Project属性添加到* Task *列表视图,或仅添加到Task Detail视图。您还可以传递memberName参数来添加单个特定属性,而不是所有可见属性。有关详细信息,请参考ExpandObjectMembersAttribute类描述。

在模型编辑器中添加编辑器或列

您可以使用“视图” | “视图”的上下文菜单在“模型编辑器”中将列/项目添加到“列表”或“详细视图”。<ListView> | 列和视图| <DetailView> | 项目节点。指定IModelMemberViewItem.PropertyName值时,请使用ReferencePropertyName.PropertyName表示法。在Mobile应用程序中,将新的LayoutViewItem添加到RowLayout节点,并将其Id属性设置为此列名称,以在ListView中显示该列。下图演示了如何将Project.Deadline列添加到模型编辑器中的任务列表视图。

WaysToDisplayRef_ME

您可以将PropertyEditor节点添加到“视图” | “视图”中。<DetailView> | 项目以类似的方式,但请注意,您还应在“视图” | “视图”中添加相应的布局项目。<DetailView> | 布局节点。将编辑器添加到详细视图教程中提供了一个示例。

在局部视图中使用DetailPropertyEditor

您可以使用DetailPropertyEditor属性编辑器将参考属性显示为WinForms和ASP.NET应用程序中的嵌入式详细信息视图。移动应用程序不支持此属性编辑器。为此,可以将EditorAlias属性应用于引用属性。

using DevExpress.ExpressApp.Editors;
// ...
public class Task {
    // ...
    [EditorAlias(EditorAliases.DetailPropertyEditor)]
    public virtual Project Project { get; set; }
}

或者,您可以为特定于平台的项目(WinForms或ASP.NET)运行模型编辑器,并设置BOModel | IModelCommonMemberViewItem.PropertyEditorType属性。<类别> | 会员| <Member>节点到DetailPropertyEditor。

WaysToDisplayRef_DetailPropertyEditor_ME

下图演示了使用DetailPropertyEditor显示的Project属性。

WaysToDisplayRef_DetailPropertyEditor

添加计算的属性

您可以声明一个其值如下计算的属性。

public class Task {
    // ...
    public DateTime? Deadline {
        get { return Project != null ? Project.Deadline : null; }
    }
}

您还可以在模型编辑器中添加自定义计算字段,并使用IModelMember.Expression引用必需的属性。

WaysToDisplayRef_CustomField

在这两种情况下,“最后期限”属性在“任务视图”中都是只读的。如果需要对其进行编辑,请实现INotifyPropertyChanged接口,并按以下方式声明Deadline

using System.ComponentModel.DataAnnotations.Schema;
// ...
public class Task : INotifyPropertyChanged {
    // ...
    private void OnChanged(String propertyName) {
        if (PropertyChanged != null) {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
    public event PropertyChangedEventHandler PropertyChanged;
    [NotMapped]
    public DateTime? Deadline {
        get { return Project != null ? Project.Deadline : null; }
        set {
            if (Project != null) {
                Project.Deadline = value;
                OnChanged(nameof(Project));
            }
        }
    }
}

在XPO中,您不需要实现INotifyPropertyChanged ; XPBaseObject基类中提供了OnChanged受保护的方法。此外,该NonPersistentAttribute是用来代替NotMappedAttribute在XPO。

相关文章

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