EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

分类列表

当数据显示为树状结构时,您可能需要在同一列表视图中显示与当前选定节点关联的对象。通过使用XAF,您可以通过在关联的对象中实现ICategorizedItem接口并使用TreeList编辑器模块提供的CategorizedListEditor来执行此操作。本主题演示如何使用在“使用ITreeNode接口显示树列表”主题中定义的业务类执行此任务。

提示

可在http://www.devexpress.com/example=E1125的DevExpress代码示例数据库中找到完整的示例项目。

在“使用ITreeNode接口显示树列表”主题中,通过继承实现ITreeNode接口的抽象Category类来实现ProjectGroup,Project和ProjectArea类。现在,我们将通过多对一关系实现与Category类相关的Issue类。另外,要通过CategorizedListEditor显示“问题列表视图” ,Issue类将实现ICategorizedItem接口。有关此接口和CategorizedListEditor的详细信息,请参阅TreeList编辑器模块概述主题。

如下面的代码所示,实现Issue类:

using DevExpress.Persistent.Base.General;
//...
[DefaultClassOptions]
public class Issue : BaseObject, ICategorizedItem {
   private Category category;
   private string subject;
   private string description;
   public Issue(Session session) : base(session) {}
   public Issue(Session session, string subject) : base(session) {
      this.subject = subject;
   }
   [Association("Category-Issues")]
   public Category Category {
      get {
         return category;
      }
      set {
         SetPropertyValue(nameof(Category), ref category, value);
      }
   }
   public string Subject {
      get {
         return subject;
      }
      set {
         SetPropertyValue(nameof(Subject), ref subject, value);
      }
   }
   public string Description {
      get {
         return description;
      }
      set {
         SetPropertyValue(nameof(Description), ref description, value);
      }
   }
   ITreeNode ICategorizedItem.Category {
      get {
          return Category;
      }
      set {
         Category = (Category)value;
      }
   }
}
注意

由隐含实现ICategorizedItem接口的私有Category属性返回的公共属性必须称为“类别”。内部基础结构当前需要这样做。

修改Category类以添加与Issue对象的关联:

[NavigationItem]
public abstract class Category : BaseObject, ITreeNode {
   [Association("Category-Issues")]
   public XPCollection<Issue> Issues {
      get {
         return GetCollection<Issue>(nameof(Issues));
      }
   }
   private XPCollection<Issue> allIssues;
   public XPCollection<Issue> AllIssues {
      get {
         if (allIssues == null) {
            allIssues = new XPCollection<Issue>(Session, false);
            CollectIssuesRecursive(this, allIssues);
            allIssues.BindingBehavior = CollectionBindingBehavior.AllowNone;
         }
         return allIssues; 
      }
   }   
   private void CollectIssuesRecursive(Category issueCategory, XPCollection<Issue> target) {
      target.AddRange(issueCategory.Issues);
      foreach (Category childCategory in issueCategory.Children) {
         CollectIssuesRecursive(childCategory, target);
      }
   }
  //...
}

检查是否将TreeList编辑器模块添加到Windows窗体应用程序项目中,然后运行该应用程序。调用问题列表视图。在左侧的树列表中选择一个树节点,然后执行“新建操作”,以为相应的Category对象创建一个Issue。在树列表的右侧,显示与当前选定的树节点关联的“发货”对象列表。

分类列表编辑器

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