EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

如何:实现视图项

本主题演示如何实现自定义视图项并将其显示在所有详细视图上。该视图项显示与特定业务对象类型相对应的图像。您可以在“应用程序模型”中指定此图像。在本主题中,我们使用Windows控件显示此查看项,因此此示例仅适用于WinForms应用程序。

IconDetailItem

提示

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

定制的View Item的实现过程包括两部分:

创建一个视图项

  1. 在WinForms模块项目中,创建一个ViewItem类后代,并将其命名为“ ClassIconDetailItem”。
  2. 重写CreateControlCore方法以创建表示UI中的视图项的控件。
  3. 创建一个实现IModelViewItem的自定义接口,并将其命名为“ IModelClassIcon”。
  4. 在此界面中,定义与要在“应用程序模型”中使用的“查看项”属性一致的属性。如果不想在应用程序模型中指定视图项的属性,则不要在此接口中定义任何属性。
  5. 将此接口作为模型参数传递给View Item的构造函数。这允许使用来自相应应用程序模型节点的数据来初始化和配置视图项。
  6. 装饰ClassIconDetailItem与类ViewItemAttribute并通过IModelClassIcon接口属性的参数。解决方案重建后,这将在应用程序模型的ViewItems节点中显示一个新的子节点。 RegisteredClassIcon

以下代码演示了自定义视图项:

using System;
using System.Drawing;
using System.Windows.Forms;
using DevExpress.ExpressApp.Editors;
using DevExpress.ExpressApp.Model;
using DevExpress.ExpressApp.Utils;
//...
public interface IModelClassIcon : IModelViewItem { }

[ViewItemAttribute(typeof(IModelClassIcon))]
public class ClassIconDetailItem : ViewItem {
    private IModelClassIcon Info;
    public ClassIconDetailItem(IModelClassIcon info, Type classType)
        : base(classType, info.Id) {
        Info = info;
    }
    protected override object CreateControlCore() {
        PictureBox imageControl = new PictureBox();
        string imageName = ((IModelDetailView)Info.Parent.Parent).ImageName;
        ImageInfo imageInfo = ImageLoader.Instance.GetLargeImageInfo(imageName);
        if(imageInfo.IsEmpty) {
            imageControl.Visible = false;
        }
        else {
            Image image = imageInfo.Image;
            imageControl.Image = image;
            imageControl.Width = image.Width;
            imageControl.Height = image.Height;
        }
        return imageControl;
    }
}

在详细视图上添加自定义视图项目

  1. 在WinForms模块项目中,为ModelDetailViewLayoutNodesGenerator和ModelDetailViewItemsNodesGenerator节点生成器实现ModelNodesGeneratorUpdater <T>后代(生成器更新器)。将它们命名为“ MyDetailViewLayoutUpdater”和“ MyDetailViewItemUpdater”。
  2. 在WinForms模块类后代的重写的ModuleBase.AddGeneratorUpdaters方法中注册这些更新程序。

以下代码显示了如何执行此操作:

using System.ComponentModel;
using DevExpress.ExpressApp;
using DevExpress.ExpressApp.Model;
using DevExpress.ExpressApp.Model.NodeGenerators;
using DevExpress.ExpressApp.Model.Core;
using DevExpress.ExpressApp.Layout;
//...
public class MyDetailViewLayoutUpdater : ModelNodesGeneratorUpdater<ModelDetailViewLayoutNodesGenerator> {
    public override void UpdateNode(ModelNode node) {
        IModelViewLayout layoutNode = (IModelViewLayout)node;
        IModelLayoutGroup mainGroup = 
            layoutNode.GetNode(ModelDetailViewLayoutNodesGenerator.MainLayoutGroupName) as IModelLayoutGroup;
        mainGroup.Direction = FlowDirection.Horizontal;
        IModelLayoutViewItem myItem = mainGroup.AddNode<IModelLayoutViewItem>("Icon");
        myItem.Index = int.MinValue;
        myItem.MaxSize = new System.Drawing.Size(64, 64);
        myItem.SizeConstraintsType = XafSizeConstraintsType.Custom;
        myItem.ViewItem = ((IModelCompositeView)layoutNode.Parent).Items.GetNode("Icon") as IModelViewItem;
    }
}

public class MyDetailViewItemUpdater : ModelNodesGeneratorUpdater<ModelDetailViewItemsNodesGenerator> {
    public override void UpdateNode(ModelNode node) {
        IModelViewItems itemsNode = (IModelViewItems)node;
        itemsNode.AddNode<IModelClassIcon>("Icon");
    }
}

[ToolboxItemFilter("Xaf.Platform.Win")]
public sealed partial class MySolutionWindowsFormsModule : ModuleBase {
    // ...
    public override void AddGeneratorUpdaters(ModelNodesGeneratorUpdaters updaters) {
        base.AddGeneratorUpdaters(updaters);
        updaters.Add(new MyDetailViewLayoutUpdater());
        updaters.Add(new MyDetailViewItemUpdater());
    }
}

运行该应用程序,并确保所有详细信息视图都包含类图标。

相关文章

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