EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

如何:过滤链接对话框的列表视图

本主题详细介绍如何在“链接操作”的弹出窗口中过滤“列表视图”。有时,您可能需要根据特定条件过滤列表视图。通常,您可能需要使列表视图数据源依赖于源详细信息视图的属性编辑器值。该eXpressApp框架提供了DataSourcePropertyAttributeDataSourceCriteriaAttribute用于这一目的。通过模型编辑器,可以在代码和应用程序模型中应用这些属性。本主题演示如何应用DataSourceProperty和DataSourceCriteria 使用动态生成的特殊数据源在代码中添加属性。

注意
提示

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

初步实施

最初,联系人包含“职位和任务”集合。联系人和任务对象通过多对多关系关联。Contact和Position对象通过一对多关系关联。以下代码显示了如何实现这些类:

using System.ComponentModel;
using DevExpress.Data.Filtering;
//...
[DefaultClassOptions]
public class Contact : Person {
   public Contact(Session session) : base(session) {}
   private Position position;
   public Position Position {
      get {
         return position;
      }
      set {
         SetPropertyValue(nameof(Position), ref position, value);
      }
   }
   [Association("Contact-DemoTask")]
   public XPCollection<DemoTask> Tasks {
      get {
         return GetCollection<DemoTask>(nameof(Tasks));
      }
   }
}
[DefaultClassOptions]
[System.ComponentModel.DefaultProperty(nameof(Title))]
public class Position : BaseObject {
   public Position(Session session) : base(session) {}
   private string title;
   public string Title {
      get {
         return title;
      }
      set {
         SetPropertyValue(nameof(Title), ref title, value);
      }
   }
}
[DefaultClassOptions]
public class DemoTask : Task {
   private Priority priority;
   public DemoTask(Session session): base(session) {}
   public Priority Priority {
      get {
         return priority;
      }
      set {
         SetPropertyValue(nameof(Priority), ref priority, value);
      }
   }
   [Association("Contact-DemoTask")]
   public XPCollection<Contact> Contacts {
      get {
         return GetCollection<Contact>(nameof(Contacts));
      }
   }
   //...
}
public enum Priority {
   Low = 0,
   Normal = 1,
   High = 2
}

下图演示了Windows Forms应用程序中的“联系人详细信息视图”:

HowToFilterLinkDialogDialogListView

在此,“链接操作”的弹出窗口显示具有所有现有Task对象的列表视图。但是,某些情况下可能需要此列表视图显示过滤的集合。

假定只能将高优先级任务分配给管理者。应该根据条件[Priority] =“ High”来过滤Link Action弹出窗口中的List View 。在这种情况下,可以将DataSourceCriteriaAttribute应用于Contact.Tasks属性。但是,我们决定仅当当前Contact对象的Position为manager时才应过滤此List View。因此,仅当当前联系人的“职位”的“标题”属性设置为“经理”时,才需要生成过滤的Task对象集合。在所有其他情况下,列表视图将包含所有现有的Task对象。为此,DataSourcePropertyAttribute是非常有帮助的。我们将其应用于Contact.Tasks属性,并将新集合作为数据源传递。以下代码演示了如何执行此操作:

using System.ComponentModel;
using DevExpress.Data.Filtering;
//...
[DefaultClassOptions]
public class Contact : Person {
   //...
   [Association("Contact-DemoTask")]
   // Set the AvailableTasks collection as the data source for the Tasks property
   [DataSourceProperty(nameof(AvailableTasks))]
   public XPCollection<DemoTask> Tasks {
      get {
         return GetCollection<DemoTask>(nameof(Tasks));
      }
   }
   private XPCollection<DemoTask> availableTasks;
   [Browsable(false)] // Prohibits showing the AvailableTasks collection separately
   public XPCollection<DemoTask> AvailableTasks {
      get {
         if(availableTasks == null) {
            // Retrieve all Task objects
            availableTasks = new XPCollection<DemoTask>(Session);
         }
      // Filter the retrieved collection according to the current conditions
      RefreshAvailableTasks();
      // Return the filtered collection of Task objects
      return availableTasks;
      }
   }
   private void RefreshAvailableTasks() {
      if(availableTasks == null)
         return;
      if((Position != null) && (Position.Title == "Manager")) {
         //Filter the collection
         availableTasks.Criteria = CriteriaOperator.Parse("[Priority] = 'High'");
      }
      else {
         //Remove the applied filter
         availableTasks.Criteria = null;
      }
   }
   private Position position;
   public Position Position {
      get {
         return position;
      }
      set {
         SetPropertyValue(nameof(Position), ref position, value);
         // Refresh the Tasks property data source
         RefreshAvailableTasks();
      }
   }
}

下图显示了“联系人详细信息”视图和“链接操作”的过滤后的列表视图:

HowToFilterLinkDialogDialogListView_Result

相关文章

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