EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

如何:使用条件属性编辑器

本主题详细说明了在XAF应用程序中使用“条件属性编辑器”的细节。此处演示了一个允许最终用户在运行时设计和保存过滤条件的应用程序。

注意

移动应用程序不提供任何“条件属性编辑器”,因此无法在移动平台中实现本主题中描述的方法。

提示

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

要创建示例应用程序,请执行以下操作:

  1. 定义其业务列表视图稍后将被过滤的业务类。
  2. 定义FilteringCriterion业务类,该业务类表示“产品”列表视图的过滤条件。
  3. 创建一个自定义视图控制器,其中包含用于过滤列表视图的Action

要开始构建示例应用程序,使用DevExpress v 19.2 XAF解决方案向导模板库创建一个名为HowToUseCriteriaPropertyEditors的新XAF应用程序解决方案。内置Visual Studio模板。

步骤1-添加产品和人员业务类别

右键单击HowToUseCriteriaPropertyEditors.Module项目,然后选择“添加DevExpress项”New Item ...调用模板库。然后选择XAF业务对象| XPO Business Object项目项,将其命名为Product,然后按Add Item。您将获得一个带有单个类声明的自动生成的代码文件。用以下代码替换自动生成的类声明,以四个不同类型的持久性属性定义一个类:

[DefaultClassOptions, ImageName("BO_Product")]
public class Product : BaseObject {
    public Product(Session session) : base(session) { }
    public string Name {
        get { return GetPropertyValue<string>(nameof(Name)); }
        set { SetPropertyValue<string>(nameof(Name), value); }
    }
    public double Price {
        get { return GetPropertyValue<double>(nameof(Price)); }
        set { SetPropertyValue<double>(nameof(Price), value); }
    }
    public int Quantity {
        get { return GetPropertyValue<int>(nameof(Quantity)); }
        set { SetPropertyValue<int>(nameof(Quantity), value); }
    }
    public Person Manager {
        get { return GetPropertyValue<Person>(nameof(Manager)); }
        set { SetPropertyValue<Person>(nameof(Manager), value); }
    }
}

经理的参考属性是的人物类型,即从类业务类库。通过模型编辑器将Person项添加到ShowNavigationItemNew动作(请参阅将项添加到导航控件并将项添加到New Action)。

第2步-定义FilteringCriterion业务类

将名为FilteringCriterion的域对象添加到HowToUseCriteriaPropertyEditors.Module项目中,并使用以下代码替换自动生成的类声明:

using DevExpress.ExpressApp.Editors;
using DevExpress.ExpressApp.Utils;
using DevExpress.Persistent.Base;
using DevExpress.Persistent.BaseImpl;
using DevExpress.Xpo;
using System;
using System.ComponentModel;
//...
[DefaultClassOptions, ImageName("Action_Filter")]
public class FilteringCriterion : BaseObject {
    public FilteringCriterion(Session session) : base(session) { }
    public string Description {
        get { return GetPropertyValue<string>(nameof(Description)); }
        set { SetPropertyValue<string>(nameof(Description), value); }
    }
    [ValueConverter(typeof(TypeToStringConverter)), ImmediatePostData]
    [TypeConverter(typeof(LocalizedClassInfoTypeConverter))]
    public Type ObjectType {
        get { return GetPropertyValue<Type>(nameof(ObjectType)); }
        set {
            SetPropertyValue<Type>(nameof(ObjectType), value); 
            Criterion = String.Empty;
        }
    }
    [CriteriaOptions("ObjectType"), Size(SizeAttribute.Unlimited)]
    [EditorAlias(EditorAliases.PopupCriteriaPropertyEditor)]
    public string Criterion {
        get { return GetPropertyValue<string>(nameof(Criterion)); }
        set { SetPropertyValue<string>(nameof(Criterion), value); }
    }
}

此类的对象表示过滤条件。“描述”字段包含描述标准的文本。这些描述将用于填充可能的过滤器的下拉列表。该标准属性保存的标准。要使用内置的XAF标准属性编辑器,保存条件的属性必须应用CriteriaOptionsAttribute。该属性的参数是附加Type属性的名称,该属性指定在构造条件时使用的对象的类型。在此示例中,它是ObjectType属性。此外,CriteriaOptions属性更改了该属性的默认属性编辑器:

  • 在Windows窗体应用程序中使用CriteriaPropertyEditor
  • ASPxCriteriaPropertyEditor用于ASP.NET Web应用程序

第3步-创建自定义列表视图控制器

将以下CriteriaController类添加到HowToUseCriteriaPropertyEditors.Module项目。

using DevExpress.ExpressApp;
using DevExpress.ExpressApp.Actions;
using DevExpress.Persistent.Base;
using DevExpress.ExpressApp.Editors;
using DevExpress.Data.Filtering;
using DevExpress.ExpressApp.Templates;
// ...
public class CriteriaController : ObjectViewController {
    private SingleChoiceAction filteringCriterionAction;
    public CriteriaController() {
        filteringCriterionAction = new SingleChoiceAction(
            this, "FilteringCriterion", PredefinedCategory.Filters);
        filteringCriterionAction.Execute  = this.FilteringCriterionAction_Execute;
        TargetViewType = ViewType.ListView;
    }
    protected override void OnActivated() {
        filteringCriterionAction.Items.Clear();
        foreach (FilteringCriterion criterion in ObjectSpace.GetObjects<FilteringCriterion>())
            if (criterion.ObjectType.IsAssignableFrom(View.ObjectTypeInfo.Type)) {
                filteringCriterionAction.Items.Add(
                    new ChoiceActionItem(criterion.Description, criterion.Criterion));
            }
        if (filteringCriterionAction.Items.Count > 0)
            filteringCriterionAction.Items.Add(new ChoiceActionItem("All", null));
    }
    private void FilteringCriterionAction_Execute(
        object sender, SingleChoiceActionExecuteEventArgs e) {
        ((ListView)View).CollectionSource.BeginUpdateCriteria();
        ((ListView)View).CollectionSource.Criteria.Clear();
        ((ListView)View).CollectionSource.Criteria[e.SelectedChoiceActionItem.Caption] =
            CriteriaEditorHelper.GetCriteriaOperator(
            e.SelectedChoiceActionItem.Data as string, View.ObjectTypeInfo.Type, ObjectSpace);
        ((ListView)View).CollectionSource.EndUpdateCriteria();
    }
}

该控制器添加FilteringCriterion SingleChoiceAction,并使用其ObjectType与当前列表视图中显示的对象类型匹配的所有现有FilterCriterion对象填充Action的下拉列表。

FilteringCriterion操作适用于在下拉列表中的列表视图中选择的标准。请注意,要将FilterCriterion对象的Criterion属性值转换为DevExpress.Data.Filtering.CriteriaOperator对象,您需要调用静态CriteriaEditorHelper.GetCriteriaOperator方法。该方法采用三个参数。的字符串参数表示标准进行转换。所述类型参数指定的标准构造的对象类型。所述对象空间参数指定任何IObjectSpace包含指定类型的对象。

注意

在这种情况下,您不应使用CriteriaOperator.Parse方法。Criteria属性编辑器可以生成包含对象参数的Criteria字符串,这些对象参数特定于XAF,并且不能由CriteriaOperator.Parse进行解析。

现在,您可以运行Windows窗体或ASP.NET应用程序,创建多个PersonProductFilterCriteria对象,然后尝试FilteringCriterion操作。

HowToUseCriteriaPropertyEditorsWin

Criteria属性编辑器也在“属性编辑器” | “属性编辑器”中进行了演示。XAF随附的Feature Center演示中的“条件属性”部分。默认情况下,Feature Center演示安装在%PUBLIC%\ Documents \ DevExpress演示19.2 \ Components \ eXpressApp Framework \ FeatureCenter中。该演示的ASP.NET版本可从http://demos.devexpress.com/XAF/FeatureCenter/在线获得。

相关文章

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