EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

Access编辑器设置

本主题演示如何使用视图控制器访问详细视图中的编辑器。该控制器在联系人详细信息视图中搜索用于将数据绑定到控件的“周年属性”编辑器,并在未设置“周年属性”值时指定控件显示“ N / A”。当详细视图处于编辑模式(DetailView.ViewEditMode)时,将显示“ N / A”文本。

注意

我们建议您先阅读以下主题,然后再继续:

要查看本主题中讨论的示例,请访问MainDemo.Module.Win | Flash Player。控制器MainDemo.Module.Web | 在Controllers文件夹中,打开WinNullTextEditorController.csWinNullTextEditorController.vb)或WebNullTextEditorController.csWebNullTextEditorController.vb)文件。该MainDemo应用程序安装在%PUBLIC%\文件\ DevExpress的演示19.2 \组件\ eXpressApp框架\ MainDemo默认。可从http://demos.devexpress.com/XAF/MainDemo/在线获得ASP.NET版本。

在WinForms应用程序中访问编辑器设置

  • 如“添加简单操作”课程(步骤1-3)中所述,将名为“ WinNullTextEditorController”的视图控制器添加到MySolution.Module.Win项目。确保将TargetViewType属性设置为DetailView(步骤3)。

  • 重写OnActivated方法。使用CompositeView.FindItem方法从当前View的CompositeView.Items列表中获取周年属性编辑器,该列表包含Property Editors和View Items。

  • OnActivated方法中,订阅CompositeView.ItemsChanged事件。然后,Controller处理用户在运行时添加的Anniversary View Item 。否则,控制器仅在设计时与明细视图中包含的项目一起使用。
  • 使用ViewItem.Control属性访问周年属性编辑器的控件。将控件强制转换为适当的类型以使用其属性或订阅其事件。请参阅内置编辑器支持的数据类型,以确定属性编辑器的有效控件类型。在下面的示例中,ViewItem.Control强制转换为BaseEdit类型。
  • 订阅ViewItem.ControlCreated事件,并将您的自定义代码放在其处理程序中,以禁止控件自定义,直到创建控件为止。

以下代码演示了WinNullTextEditorController

using DevExpress.XtraEditors;
using DevExpress.ExpressApp;
using DevExpress.ExpressApp.Editors;
using DevExpress.ExpressApp.Utils;
// ...
public partial class WinNullTextEditorController : ViewController {
    public WinNullTextEditorController() {
        InitializeComponent();
        RegisterActions(components);
    }
    private void InitNullText(PropertyEditor propertyEditor) {
        ((BaseEdit)propertyEditor.Control).Properties.NullText = CaptionHelper.NullValueText;
    }
    private void WinNullTextEditorController_ItemsChanged(Object sender, ViewItemsChangedEventArgs e) {
        if(e.ChangedType == ViewItemsChangedType.Added && e.Item.Id == "Anniversary") {
            TryInitializeAnniversaryItem();
        }
    }
    private void propertyEditor_ControlCreated(Object sender, EventArgs e) {
        InitNullText((PropertyEditor)sender);
    }
    protected override void OnActivated() {
        base.OnActivated();
        ((CompositeView)View).ItemsChanged  = WinNullTextEditorController_ItemsChanged;
        TryInitializeAnniversaryItem();
    }
    protected override void OnDeactivated() {
        base.OnDeactivated();
        ((CompositeView)View).ItemsChanged -= WinNullTextEditorController_ItemsChanged;
    }
    public void TryInitializeAnniversaryItem() {
        PropertyEditor propertyEditor = ((DetailView)View).FindItem("Anniversary") as PropertyEditor;
        if(propertyEditor != null) {
            if(propertyEditor.Control != null) {
                InitNullText(propertyEditor);
            }
            else {
                propertyEditor.ControlCreated  = propertyEditor_ControlCreated;
            }
        }
    }
}

请注意,WinNullTextEditorController使用CaptionHelper.NullValueText属性来获取本地化的“ N / A”文本。

运行WinForms应用程序,然后打开“联系人详细信息视图”。在周年纪念编辑器显示“N / A”的文本,如果编辑的价值是不确定的。

Tutorial_EF_Lesson8_1

提示

此方法不适用于List View的就地编辑器。要自定义这些编辑器,请执行以下一项操作:

ASP.NET应用程序中的Access编辑器设置

  • 如“添加简单操作”主题(步骤1-3)中所述,将一个名为“ WebNullTextEditorController ”的视图控制器添加到MySolution.Module.Web项目中。
  • 重写OnActivated方法。使用CompositeView.FindItem方法从当前视图的CompositeView.Items列表中获取周年属性编辑器。它包含“属性编辑器”和“视图项”。
  • 使用WebPropertyEditor.Editor属性访问周年属性编辑器的控件。将控件强制转换为适当的类型以使用其属性或订阅其事件。请参阅内置编辑器支持的数据类型,以确定属性编辑器的有效控件类型。在下面的示例中,ViewItem.Control强制转换为ASPxDateEdit类型。
  • 订阅ViewItem.ControlCreated事件以确保在自定义控件之前创建了该控件。

以下代码演示了WebNullTextEditorController

using DevExpress.Web;
using DevExpress.ExpressApp;
using DevExpress.ExpressApp.Web.Editors;
using DevExpress.ExpressApp.Utils;
using DevExpress.ExpressApp.Editors;
// ...
public partial class WebNullTextEditorController : ViewController {
    public WebNullTextEditorController() {
        InitializeComponent();
        RegisterActions(components);
    }
    private void InitNullText(WebPropertyEditor propertyEditor) {
        if(propertyEditor.ViewEditMode == DevExpress.ExpressApp.Editors.ViewEditMode.Edit) {
            ((ASPxDateEdit)propertyEditor.Editor).NullText = CaptionHelper.NullValueText;
        }
    }
    private void propertyEditor_ControlCreated(object sender, EventArgs e) {
        InitNullText((WebPropertyEditor)sender);
    }
    protected override void OnActivated() {
        base.OnActivated();
        WebPropertyEditor propertyEditor = ((DetailView)View).FindItem("Anniversary") as WebPropertyEditor;
        if(propertyEditor != null) {
            if(propertyEditor.Control != null) {
                InitNullText(propertyEditor);
            }
            else {
                propertyEditor.ControlCreated  = propertyEditor_ControlCreated;
            }
        }
    }
    protected override void OnDeactivated() {
        base.OnDeactivated();
        ViewItem propertyEditor = ((DetailView)View).FindItem("Anniversary");
        if(propertyEditor != null) {
            propertyEditor.ControlCreated -= new EventHandler<EventArgs>(propertyEditor_ControlCreated);
        }
    }
}

请注意,WebNullTextEditorController使用CaptionHelper.NullValueText属性来获取本地化的“ N / A”文本。

运行ASP.NET应用程序,然后打开“联系人详细信息视图”。在周年纪念编辑器显示“N / A”的文本,如果编辑的价值是不确定的。

Tutorial_EF_Lesson8_3

提示

这种方法不会影响List View的就地编辑器。要同时自定义这些编辑器,请使用如何:自定义内置属性编辑器(ASP.NET)主题中描述的解决方案。或者,按照ComplexWebListEditor.FindPropertyEditor方法说明中的指示访问所需的就地Web列表编辑器。要将自定义设置应用于ASPxGridListEditor的列,请处理ASPxGridListEditor.CreateCustomGridViewDataColumnASPxGridListEditor.CustomizeGridViewDataColumn事件。如果您需要访问用于显示当前列中的单元格的模板,请使用ASPxGridListEditor.CreateCustomDataItemTemplateASPxGridListEditor.CreateCustomEditItemTemplate事件。

由于WinForms和ASP.NET平台的特定情况,“视图项”和“列表编辑器”控件在创建后可能无法立即准备好自定义。如果上述自定义无效,请考虑处理其他依赖于平台的事件或使用其他方法。

这些与平台有关的其他事件表示控件的“就绪”状态:控件已添加到表单控件层次结构中或已绑定到数据。如果您需要其他帮助来执行自定义,请使用支持中心与我们联系。

下一课: 访问网格控件属性

相关文章

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