EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

过滤器应用程序模型节点

过滤器 应用程序模型”节点允许您将预定义条件添加到内置SetFilter Action中。在“操作”的下拉窗口中选择条件时,将使用此条件过滤当前列表视图。

Tutorial_UIC_Lesson19_4

当您需要最终用户能够选择所需的过滤器时,请使用此技术过滤列表视图。此外,有权访问应用程序模型的最终用户将能够通过模型编辑器添加或更改预定义的过滤器。

对于在“过滤器”节点中未指定过滤器的列表视图,不会激活SetFilter操作。另外,可以为根列表视图和嵌套列表视图激活此操作,因为MainForm和DetailViewForm Windows窗体模板以及默认ASP.NET模板包含显示此操作的“筛选器操作”容器。若要了解如何在弹出窗口中显示“筛选器操作”,请参阅“将操作添加到弹出窗口”主题。

要自定义SetFilter Action的行为,请通过代码对其进行访问。此Action包含在FilterController中,可以通过其FilterController.SetFilterAction属性进行访问。

通过模型编辑器添加过滤器

要将项目添加到SetFilter Action中,请执行以下操作。

  • 调用所需视图的上下文菜单| <ListView> | 过滤节点,然后选择添加|。ListViewFilterItem菜单项。
  • 对于新的“过滤器”节点,指定IDCaptionCriteria属性。必须使用“标准语言语法”指定“标准”值。为了简化此任务,您可以通过单击“条件”值右侧的省略号按钮()来调用“过滤器生成器”对话框。在此对话框中,您可以直观地设计条件表达式。省略号按钮

    ModelEditor_SpecialEditors_Criteria

  • 如果需要,请重复前面的两个步骤。
  • 返回到“过滤器”节点,如果需要,通过CurrentFilter属性指定默认过滤器。

在代码中添加过滤器

您可以通过ListViewFilterAttribute在代码中添加预定义的过滤器。通过此属性指定的筛选器将添加到ListView节点的“筛选器”节点,该节点的IModelObjectView.ModelClass属性设置为应用该属性的类。

using DevExpress.ExpressApp.Model;
using DevExpress.ExpressApp.SystemModule;
//...
[DefaultClassOptions]
[ListViewFilter("Today", "[DueDate] = LocalDateTimeToday()")]
[ListViewFilter("In three days", "[DueDate] >= ADDDAYS(LocalDateTimeToday(), -3) AND 
    [DueDate] < LocalDateTimeToday()")]
[ListViewFilter("In two weeks", "[DueDate] >= ADDDAYS(LocalDateTimeToday(), -14) AND 
    [DueDate] < LocalDateTimeToday()")]
[ListViewFilter("The last week", "[DueDate] > LocalDateTimeLastWeek() AND 
    [DueDate] <= ADDDAYS(LocalDateTimeLastWeek(), 5)")]
[ListViewFilter("This week", "[DueDate] > LocalDateTimeThisWeek() AND 
    [DueDate] <= ADDDAYS(LocalDateTimeThisWeek(), 5)")]
public class Task : BaseObject {
   public Task(Session session) : base(session) {}
   private DateTime dueDate;
   [ModelDefault("EditMask","d")]
   public DateTime DueDate {
      get {
         return dueDate;
      }
      set {
         SetPropertyValue(nameof(DueDate), ref dueDate, value);      }
   }
}

如果要添加很难以字符串形式编写的复杂过滤器,请通过为ModelListViewFiltersGenerator节点生成器实现ModelNodesGeneratorUpdater <T>后代(Generator Updater)来在代码中添加IModelListViewFilterItem应用程序模型节点:

using DevExpress.ExpressApp.Model;
using DevExpress.ExpressApp.Model.Core;
using DevExpress.ExpressApp.SystemModule;
//...
public sealed class Module : ModuleBase {
   // ...   
    public override void AddGeneratorUpdaters(ModelNodesGeneratorUpdaters updaters) {
        base.AddGeneratorUpdaters(updaters);
        updaters.Add(new MyFilterUpdater());          
    }
}
public class MyFilterUpdater : ModelNodesGeneratorUpdater<ModelListViewFiltersGenerator> {
    public override void UpdateNode(ModelNode node) {                
        IModelListViewFilters filtersNode = (IModelListViewFilters)node;
        if(((IModelListView)filtersNode.Parent).ModelClass.TypeInfo.Type == 
            typeof(MyBusinessClass)) {
            IModelListViewFilterItem myFilter = 
                filtersNode.AddNode<IModelListViewFilterItem>("MyComplexFilter");
            myFilter.Criteria = "";
            myFilter.Index = 1;
            myFilter.Caption = "My Filter";
            myFilter.Description = "";
            filtersNode.CurrentFilter = myFilter;
        }
    }
}

要了解有关如何在代码中扩展应用程序模型的整个概念,请参阅在代码中扩展和自定义应用程序模型主题。

要了解如何建立标准,请参阅“建立标准的方法”主题。

相关文章

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