EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

如何:为字符串属性编辑器动态提供预定义的值(WinForms)

本主题描述Windows窗体应用程序的自定义属性编辑器的实现。此处实现了用于编辑业务对象的String类型的CultureCode(语言环境)属性的自定义属性编辑器。“属性编辑器”控件的下拉列表将显示最终用户的Windows操作系统中安装的区域性。

注意

您还可以使用IModelCommonMemberViewItem.PredefinedValues属性在模型编辑器中指定预定义值。这种方法非常简单,因为它不需要额外的编码,但是在这种情况下,您将无法在代码中动态更新值列表。

下图显示了生成的属性编辑器:

CustomPropertyEditor

默认情况下,XAF为String类型属性创建StringPropertyEditor。如果相应的BOModel | | Property,则此属性编辑器显示项目的下拉列表。<类别> | 会员| <成员>节点的RowCount属性设置为0,并且PredefinedValues属性包含下拉列表的预定义列表值。但是,如果在运行时之前不知道这些值,则有必要实施自定义属性编辑器。

由于您将使用DevExpress提供的控件,因此可以通过覆盖DXPropertyEditor类方法来实现自定义属性编辑器。您可以直接继承此类,也可以继承其后代之一(例如StringPropertyEditor)。请注意,您的编辑器应该是公开的。因此,必须重写以下方法。

  1. 重写CreateControlCore方法以返回ComboBoxEdit控件。
  2. 重写CreateRepositoryItem方法以返回RepositoryItemComboBox类型的项目,因为它是ComboBoxEdit控件的适当类型。
  3. 重写SetupRepositoryItem方法,以使用项目填充控件的下拉列表。我们使用CultureInfo.GetCultures方法来检索已安装的区域性。

要指定可以将实现的属性编辑器用于String类型的属性,将应用PropertyEditor属性:

using System;
using System.Globalization;

using DevExpress.ExpressApp;
using DevExpress.ExpressApp.Editors;
using DevExpress.ExpressApp.Win.Editors;
using DevExpress.XtraEditors;
using DevExpress.XtraEditors.Controls;
using DevExpress.XtraEditors.Repository;
using DevExpress.ExpressApp.Model;
//...
[PropertyEditor(typeof(String), false)]
public class CustomStringEditor : StringPropertyEditor {
    public CustomStringEditor(Type objectType, IModelMemberViewItem info)
        : base(objectType, info) {
    }
    protected override object CreateControlCore() {
        return new ComboBoxEdit();
    }
    protected override RepositoryItem CreateRepositoryItem() {
        return new RepositoryItemComboBox();
    }
    protected override void SetupRepositoryItem(
        DevExpress.XtraEditors.Repository.RepositoryItem item) {
        base.SetupRepositoryItem(item);
        foreach (CultureInfo culture in CultureInfo.GetCultures(
            CultureTypes.InstalledWin32Cultures)) {
            ((RepositoryItemComboBox)item).Items.Add(
                culture.EnglishName   "("   culture.Name   ")");
        }
        ((RepositoryItemComboBox)item).TextEditStyle = TextEditStyles.DisableTextEditor;
    }
}

在此示例中,我们应用ModelDefaultAttribute属性以将实现的属性编辑器用于业务对象的CultureCode属性:

using DevExpress.ExpessApp.Model;
//...
[ModelDefault("PropertyEditorType", "Solution1.Module.Win.CustomStringEditor")]
public String CultureCode {
   get { return GetPropertyValue<String>(nameof(CultureCode)); }
   set { SetPropertyValue(nameof(CultureCode), value); }
}

在这里,ModelDefault属性指定PropertyEditorType应用模型的财产IModelMember定义该节点CultureCode财产。或者,您可以通过模型编辑器进行操作

注意

您可以在XAF随附的Feature Center Demo中看到此处演示的代码以及自定义属性编辑器上的更多示例。

相关文章

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