EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

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

本主题描述了自定义ASP.NET Web属性编辑器的实现,该编辑器将用于编辑String类型的业务对象的CultureCode(语言环境)属性。属性编辑器控件的下拉列表将显示CultureInfo.GetCultures方法返回的区域性。

注意

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

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

WebPropertyEditorStandardControl

要通过继承ASPxPropertyEditor类来实现属性编辑器,请重写以下方法(请参阅ASPxPropertyEditor):

  1. 使用RenderHelper类的helper方法重写CreateEditModeControlCore方法以返回ASPxComboBox控件。订阅控件的ValueChanged事件,以调用属性编辑器的EditValueChangedHandler方法。控件的值更改时,此方法将更新关联的属性。
  2. 重写SetupControl方法,以使用项目填充控件的下拉列表。我们使用CultureInfo.GetCultures方法来检索已安装的区域性。

要指定可以将实现的属性编辑器用于String类型的属性,将应用PropertyEditor属性(请参见PropertyEditorAttribute):

using System;
using System.Globalization;
using System.Web.UI.WebControls;

using DevExpress.Web;
using DevExpress.ExpressApp;
using DevExpress.ExpressApp.Web;
using DevExpress.ExpressApp.Editors;
using DevExpress.ExpressApp.Web.Editors.ASPx;
using DevExpress.ExpressApp.Model;
//...
[PropertyEditor(typeof(String), false)]
public class CustomStringEditor : ASPxPropertyEditor {
    ASPxComboBox dropDownControl = null;
    public CustomStringEditor(
    Type objectType, IModelMemberViewItem info) : base(objectType, info) { }
    protected override void SetupControl(WebControl control) {
        if(ViewEditMode == ViewEditMode.Edit) {
            foreach(CultureInfo culture in CultureInfo.GetCultures(
            CultureTypes.InstalledWin32Cultures)) {
                ((ASPxComboBox)control).Items.Add(culture.EnglishName   "("   culture.Name   ")");
            }
        }
    }
    protected override WebControl CreateEditModeControlCore() {
        dropDownControl = RenderHelper.CreateASPxComboBox();
        dropDownControl.ValueChanged  = EditValueChangedHandler;
        return dropDownControl;
    }
    public override void BreakLinksToControl(bool unwireEventsOnly) {
        if(dropDownControl != null) {
            dropDownControl.ValueChanged -= new EventHandler(EditValueChangedHandler);
        }
        base.BreakLinksToControl(unwireEventsOnly);
    }
}

应用ModelDefaultAttribute属性以将实现的属性编辑器用于业务对象的CultureCode属性:

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

在这里,Custom属性指定了应用程序模型的IModelMember节点的PropertyEditorType属性,该属性定义了CultureCode属性。或者,您可以使用“模型编辑器”来执行此操作。

提示

您可以在默认情况下,或位于功能中心的%PUBLIC%\ Documents \ DevExpress演示19.2 \ Components \ eXpressApp Framework \ FeatureCenter文件夹中的功能中心演示中,查看此处演示的代码以及自定义属性编辑器上的更多示例。在线演示

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