EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

TreeList编辑器模块概述

所述的TreeList编辑模块被设计成由表示的显示信息的列表视图的树形结构。为此,在ASP.NET和WinForms应用程序中使用ASPxTreeListTree List控件(来自ASPxTreeListXtraTreeList库)。这些控件提供了数据表示功能,例如对多个列排序数据值,计算和显示摘要值,节点预览,节点图像,运行时列自定义,格式化列和摘要值,使用高级编辑器显示和编辑单元格值等。

要使用ASPxTreeListTreeList控件,TreeList编辑器模块提供ASPxTreeListEditorTreeListEditor用于显示列表视图。这些列表编辑器的对象是实现业务类库中ITreeNode接口的对象。此外,TreeList编辑器模块支持分类的树视图,其中树节点代表具有相关项目的类别。为此,提供了CategorizedListEditor。该编辑器的目标是由实现ICategorizedItem接口的对象表示的类别项目。

本主题详细介绍了使用TreeList编辑器模块的基础知识。

TreeList编辑器模块包含三个模块项目:TreeListEditorsModuleBaseTreeListEditorsAspNetModuleTreeListEditorsWindowsFormsModule。您可以添加TreeListEditorsAspNetModule到ASP.NET应用程序和TreeListEditorsWindowsFormsModule的WinForms应用程序。为此,调用“应用程序设计器”并将“ TreeList编辑器”模块从“工具箱”拖到“模块”面板。在Designer中进行更改后,请确保重新生成解决方案。

注意

整理一棵树

要在UI中以树状结构显示数据,请在适当的业务类中实现ITreeNode接口。

public interface ITreeNode {
   string Name { get; }
   ITreeNode Parent { get; }
   IBindingList Children { get; }
}

ITreeNode.Name属性指定的树节点标题。所述ITreeNode.Parent属性指的是父对象(树节点)。如果将此属性设置为null(在VB中为Nothing),则该对象表示根对象(根树节点)。该ITreeNode.Children属性表示子对象的集合(子树节点)。

要查看ITreeNode接口实现的示例,请参阅使用ITreeNode接口显示树列表主题。

业务类库提供的HCategory类,它实现了ITreeNode接口。您可以按原样使用它或从中继承它,而不是从头开始实现ITreeNode接口。有关详细信息,请参阅“使用HCategory类显示树列表”主题。若要查看HCategory类的实现,请参考%PROGRAMFILES(x86)%\ DevExpress 19.2 \ Components \ Sources \ DevExpress.Persistent \ DevExpress.Persistent.BaseImpl文件夹,您将在其中找到HCategory.cs文件。

注意

如果层次结构包含无法从“列表视图”对象类型分配的类型的对象,则TreeListEditor和CategorizedListEditor无法正确显示树(请参见Type.IsAssignableFrom)。

TreeListEditors模块添加到应用程序后,默认情况下,所有表示ITreeNode对象的列表视图都通过ASPxTreeListEditor和TreeListEditor显示。此编辑器从IViewNode.Parent属性设置为null的列表视图对象构建根节点(在VB中为Nothing)。展开节点时,此编辑器将查找节点的ITreeNode.Children集合中包含的列表视图的对象。找到的对象显示为子节点。下图显示了ASPxTreeListEditor和TreeListEditor。

ASPxTreeListEditor

TreeListEditorsModule_RunTimeWeb

TreeListEditor

TreeListEditorsModule_RunTimeWin

支持节点图像

要支持节点图像,请在实现ITreeNode接口的类中实现ITreeNodeImageProvider接口。结果,每个节点将伴随有图像。

ITreeNodeImageProvider

所述ITreeNodeImageProvider声明了一个部件-该ITreeNodeImageProvider.GetImage方法。在此方法中,返回与树节点相对应的图像。

要查看ITreeNodeImageProvider接口实现的示例,请参考“树列表”中的“节点图像”主题。

实施类别项目方案

在大多数情况下,树节点表示可以具有相关项目的类别。可以根据Category-Items场景实现以下业务模型。根类别由ProjectGroup类的对象表示(“ .Net”,“ VCL”,...)。此类别的子类别由项目类型对象(“ XtraGrid”,“ XtraEditors”,“ QuantumGrid”等)表示。在此层次结构中可能会有更多级别。例如,每个项目可以包含自己的区域列表:“列”,“ RepositoryItems”,“ MaskEdit”等。这些对象应实现ITreeNode界面以树状显示。同时,可能存在与特定类别(与ProjectGroup,Project或ProjectArea)相关的Issue对象。换句话说,每个类别都通过一对多关系与“发布”对象相关。显示“问题列表视图”时,您可能需要查看类别树和与当前所选类别相关的“问题”对象列表,如下图所示。

分类列表编辑器

此图像演示Windows窗体CategorizedListEditor如何显示“问题列表”视图。如上定义,TreeList编辑器模块为方案提供此列表编辑器。它显示了表示ICategorizedItem类型的对象的列表视图,因此,上例中的Issue类应实现ICategorizedItem接口。

public interface ICategorizedItem {
   ITreeNode Category { get; set; }
}

要学习如何实现上面定义的示例,请参考“分类列表”主题。

不必通过CategorizedListEditor显示问题列表视图。例如,您可以将普通的GridListEditor用于嵌套的“问题列表”视图。为此,请执行以下操作。

  • 调用Windows窗体应用程序项目的模型编辑器
  • 右键单击视图节点,然后选择添加... | 调用的上下文菜单中的ListView

    AddListViewNode

  • 对于新创建的节点,请指定Id属性并将ModelClass属性设置为实现ICategorizedItem接口的类型(例如,在本示例中为“ Issue”)。
  • 右键单击新节点,然后选择生成内容
  • 导航到用ICategorizedItem对象(例如,在此示例中为“ ProjectArea”)的集合定义“详细视图”的“详细视图”节点。找到与此集合相对应的子级“查看项”节点。将其“视图”属性设置为在先前步骤中创建的节点。

CategorizedListEditor_GridListEditor

访问TreeListEditor或CategorizedListEditor

您可以自定义TreeListEditorCategorizedListEditor列表编辑器,或通过列表编辑器的ListEditor.Control属性公开的TreeList控件。要使用代码访问列表编辑器,请创建一个View Controller并处理其ViewController.ViewControlsCreated事件,或重写OnViewControlsCreated受保护的方法。以下代码段说明了这一点。

访问TreeListEditor:

using DevExpress.ExpressApp.TreeListEditors.Win;
using DevExpress.XtraTreeList;
using DevExpress.Persistent.Base.General;
//...
public partial class TreeListController : ViewController {
    public TreeListController() {            
        TargetViewType = ViewType.ListView;
        TargetObjectType = typeof(ITreeNode);         
    }
    protected override void OnViewControlsCreated() {
        base.OnViewControlsCreated();
        ListView view = (ListView)View;
        TreeListEditor listEditor = (TreeListEditor)view.Editor;
        TreeList treeList = listEditor.TreeList;
        // Access TreeList object here.           
    }
}

访问CategorizedListEditor:

using DevExpress.ExpressApp.TreeListEditors.Win;
using DevExpress.XtraTreeList;
using DevExpress.Persistent.Base.General;
//...
public partial class CategorizedListController : ViewController {
    public CategorizedListController() {            
        TargetViewType = ViewType.ListView;
        TargetObjectType = typeof(ICategorizedItem);         
    }
    protected override void OnViewControlsCreated() {
        ListView view = (ListView)View;
        CategorizedListEditor listEditor = (CategorizedListEditor)view.Editor;
        ListView categoriesListView = listEditor.CategoriesListView;
        TreeListEditor treeListEditor = (TreeListEditor)categoriesListView.Editor;
        TreeList treeList = treeListEditor.TreeList;
        // Do what you want with the tree list    
    }
}

由于控制器是在模块中实现的,因此将对TreeList编辑器模块的引用添加到所需的模块。您还需要设置对DevExpress.XtraTreeList.v 19.2 .dll程序集的引用。

过滤树列表

为了过滤树列表,XAF仅将ListView.CollectionSource过滤条件(CollectionSourceBase.Criteria)应用于树列表的根对象。子集合不会被处理,因为它们存储在ITreeNode.Children属性中,并且与根集合源无关。

列表视图树列表控件-TreeListASPxTreeList-提供高级筛选功能。例如,控件支持过滤运算符,并且可以过滤根对象和子对象。请点击以下链接以获取更多信息:

以下资源演示了如何在XAF应用程序中使用这些功能:

ASPxTreeList中的布尔属性

如果在服务器端进行了更改,则XAF ASPxTreeList集成代码不能立即显示布尔属性的新值。例如,如果新值被某个操作更改了,则该新值不会立即显示(需要刷新页面)。为避免此限制,请使用以下代码。

using DevExpress.Web.ASPxTreeList;
using DevExpress.ExpressApp;
using DevExpress.ExpressApp.TreeListEditors.Web;
// ...
public class RemoveTreeListDataCellTemplateController : ViewController {
    public RemoveTreeListDataCellTemplateController() : base() { }
    protected override void OnActivated() {
        base.OnActivated();
        ListView listView = View as ListView;
        if (listView != null && listView.Editor != null) {
            listView.Editor.ControlsCreated  = Editor_ControlsCreated;
        }
    }
    void Editor_ControlsCreated(object sender, EventArgs e) {
        ASPxTreeListEditor treeListEditor = sender as ASPxTreeListEditor;
        if (treeListEditor != null) {
            TreeListDataColumn column = 
                treeListEditor.TreeList.Columns["BoolProperty"] as TreeListDataColumn;
            if (column != null) {
                column.DataCellTemplate = null;
            }
        }
    }
}

使用此代码,ASPxTreeList控件将使用TreeListDataColumn显示布尔值。有关详细信息,请参见TreeListDataColumn.DataCellTemplate

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