EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

如何:使用自定义控件实现ASP.NET Web列表编辑器

eXpressApp框架附带了一些在内置列表编辑器。但是,在某些情况下,您可能需要实现自定义列表编辑器,以特定方式显示对象集合。本主题演示如何实现使用自定义控件的自定义ASPxCustomListEditor列表编辑器。此列表编辑器旨在显示对象,将自定义IPictureItem接口实现为图像列表,每个对象一个。例如,它可用于显示DVD封面。

下图演示了在专辑列表视图中实现的列表编辑器:

CustomWebListEditor

注意
  • 您可以在XAF随附的FeatureCenter演示中看到此处实现的代码。默认情况下,此演示位于%PUBLIC%\ Documents \ DevExpress演示19.2 \ Components \ eXpressApp Framework \ FeatureCenter文件夹中。
  • 使用此示例不能集成使用ClientScriptManager.RegisterStartupScript方法的ASP.NET控件。如果需要集成这样的控件,请随时与我们的支持团队联系。

当实现用于特定数据的自定义列表编辑器时,可以为特定的类设计它。但是,在此示例中,将引入一个包含列表编辑器所需属性的接口。然后,将设计列表编辑器以显示实现该接口的对象。这种方法使您可以将同一列表编辑器同时用于不同的类。通过ASPxCustomListEditor显示的列表视图将具有两列:ImageText。特殊接口具有一个附加的ID属性,该属性表示唯一的对象标识符。

using System.Drawing;
//...
public interface IPictureItem {
    Image Image { get; }
    string Text { get; }
    string ID { get; }
}

通过从ListEditor类继承其类来开始实现List Editor ,并通过重写以下成员来实现基本功能。请注意,您的编辑器应该是公开的。

  • 实例化列表编辑器控件的CreateControlsCore方法。重写它以创建和配置自定义控件的实例(在本示例中为ASPxCustomListEditorControl)。
  • AssignDataSourceToControl方法,用于将列表编辑器的数据源分配给其控件。
  • ListEditor.Refresh方法,刷新列表编辑器控件的数据源。
  • 若要指定显示IPictureItem对象的列表视图应使用ASPxCustomListEditor,请使用ListEditorAttribute装饰列表编辑器类。
using System;
using DevExpress.ExpressApp.Editors;
using DevExpress.ExpressApp.Model;
using DevExpress.ExpressApp.Utils;
// ...
[ListEditor(typeof(IPictureItem))]
public class ASPxCustomListEditor : ListEditor {
    public ASPxCustomListEditor(IModelListView info) : base(info) { }
    private ASPxCustomListEditorControl control;
    protected override object CreateControlsCore() {
        control = new ASPxCustomListEditorControl();
        control.ID = "CustomListEditor_control";
        return control;
    }
    protected override void AssignDataSourceToControl(Object dataSource) {
        if (control != null) {
            control.DataSource = ListHelper.GetList(dataSource);
        }
    }
    public override void Refresh() {
        if (control != null) control.Refresh();
    }
}

上面演示的列表编辑器可以显示实现IPictureItem接口的对象的集合。此外,当最终用户单击对象时,列表编辑器应能够为该对象调用详细视图。为此,请修改以下成员:

  • CreateControlsCore方法中,订阅控件的OnClick事件。在事件处理程序中,调用OnSelectionChangedOnProcessSelectedItem方法。
  • 重写ListEditor.FocusedObject方法,以获取并设置焦点对象。

此外,使用OnClick事件的IPictureItem字段实现自定义CustomListEditorClickEventArgs类。

[ListEditor(typeof(IPictureItem))]
public class ASPxCustomListEditor : ListEditor {
    //...
    protected override object CreateControlsCore() {
        //...
        control.OnClick  = control_OnClick;
        //...   
    }
    private void control_OnClick(object sender, CustomListEditorClickEventArgs e) {
        this.FocusedObject = e.ItemClicked;
        OnSelectionChanged();
        OnProcessSelectedItem();
    }
    private object focusedObject;
    public override object FocusedObject {
        get {
            return focusedObject;
        }
        set {
            focusedObject = value;
        }
    }
}
public class CustomListEditorClickEventArgs : EventArgs {
    public IPictureItem ItemClicked;
}

最后一步是实现以下抽象成员:

  • 重写ListEditor.SelectionType属性。由于列表编辑器支持仅在处理回发时才有效的选择,因此此属性必须返回SelectionType.TemporarySelection值。
  • 重写ListEditor.GetSelectedObjects方法。此方法必须返回所选对象的列表。在我们的案例中,这是关注的对象。
  • 重写ListEditor.ContextMenuTemplate属性。此属性用于支持列表编辑器的上下文菜单。由于Internet浏览器已经具有上下文菜单,因此我们在此属性中返回null。
using System.Collections;
using System.Collections.Generic;
using DevExpress.ExpressApp;
using DevExpress.ExpressApp.Templates;
// ...
[ListEditor(typeof(IPictureItem))]
public class ASPxCustomListEditor : ListEditor {
    //...
    public override SelectionType SelectionType {
        get { return SelectionType.TemporarySelection; }
    }
    public override IList GetSelectedObjects() {
        List<object> selectedObjects = new List<object>();
        if(FocusedObject != null) {
            selectedObjects.Add(FocusedObject);
        }
        return selectedObjects;
    }
    public override IContextMenuTemplate ContextMenuTemplate {
        get { return null; }
    }
}
相关文章

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