实际上 XtraGrid 自身不显示数据。 它使用视图来呈现绑定数据源中的数据。 视图指定记录和字段如何被排列。 视图提供了多个编辑选项、显示选项和自定义选项,提供了更改外观与感觉的方法等。 本主题描述 XtraGrid 中使用的视图技术。
视图
- 网格视图(Grid View) 以二维表格显示数据。
- 布局视图(Layout View) 把记录显示为卡片,并且支持多种字段与卡片布局。
- 带区网格视图(Banded Grid View) 以类似于网格视图的表格形式来显示数据,并且把列组织到带区内。
- 高级带区网格视图(Advanced Banded Grid View) 以类似于带区网格视图的形式来显示数据。 但是,可以把一个列安排到另一个列的下面,并且可以有不同的高度。
- 卡片视图(Card View) 把记录显示为卡片,竖向排列字段的每张卡片都在一个列中。
分层的数据表示形式
XtraGrid 支持分层的数据源,也就是在记录集之间设置有主/从关系的数据源。 在这种情况下,可以使用特定视图 (网格视图、卡片视图等) 来显示每个记录集。 网格把视图组织为一个分层结构,来反映记录集之间的关系。
要把网格控件连接到数据源,则使用 GridControl.DataSource 和 GridControl.DataMember 属性。 这些属性引用的数据源通过一个 主视图 呈现,并且主视图总是被显示在 XtraGrid 的顶层。 可以通过 GridControl.MainView 属性访问主视图。 在默认情况下,主视图通过一个网格视图来呈现。 在这种情况下,GridControl.MainView 属性引用了 GridView 类的一个实例。 要为主视图使用其他的视图类型,则需要把相应的视图对象指派到该属性。在主/从模式中,主记录集可以有多个主/从关系。 在这种情况下,XtraGrid 中的每个主控行都提供了对几个细节视图的访问,这些细节视图与特定的主/从关系相对应。 通过展开主控行而打开的细节视图称为 克隆 视图。 如果展开了另一个主控行,则创建另一个克隆视图来呈现相应的细节数据。 当主控行被折叠时,它的克隆视图被销毁。
下面的插图展示了一个简单的网格控件,它呈现了分层的主/从关系。 顶层视图中的每个行都有两个主/从关系 (Products 和 Categories),并且分别使用网格视图和卡片视图来显示。 Products 细节表格依次提供对细节数据 (由另一个网格视图呈现) 的访问:
主/从关系的克隆视图 (为不同的主控行显示) 从名称为 模式 的单个视图中复制设置。 模式视图(Pattern Views) 作为创建实体细节视图的模板。 模式视图不包含数据,也不会被显示在网格控件内。 要获得更多关于主/从模式中的视图的信息,请参阅 模式视图和克隆视图 文档。
要把模式视图与特定关系相关联,则使用 GridControl.LevelTree 属性。 在设计时刻,可以使用 层设计器(Level Designer) 来达到此目的。 它也有助于为网格控件指定主视图。
层设计器(Level Designer)
当网格控件被绑定到包含主/从关系的 DataTable 时,通过“层设计器(Level Designer)”,网格控件获取此关系的结构,并在设计器中以 层 呈现。 可以使用“层设计器(Level Designer)”来把模式视图指派到关系。
下面的插图展示了网格控件的“层设计器(Level Designer)”,演示 主/从关系:在插图中,主视图由一个高级带区网格视图 (advBandedGridView1) 呈现。 SuppliersProducts、SuppliersCategoryProducts 和 ProductsOrder_x0020_Details 关系的模式视图分别是 gridView1、cardView1 和 gridView2。
要获得关于使用“层设计器(Level Designer)” 的信息,请参阅 层设计器(Level Designer) 章节。 主/从模式概述 文档提供了关于主/从模式的总说明,提供了展示主/从关系的不同实现方式的文档链接。
使用视图
要访问当前获得焦点的视图 (主视图或细节克隆视图),则使用 GridControl.FocusedView 属性。
GridControl.MainView 和 GridControl.FocusedView 属性返回 BaseView 类的对象。 该类表示 XtraGrid 中所有视图的基础类。 在某些情况下,可能需要把返回对象分配为特定的视图类型 GridView、CardView 等) 来获得所需的功能。XtraGrid 也提供了展开主控行和访问细节克隆视图的方法。 要获得更多信息,请参阅 展开和折叠主控行 文档。
在运行时刻显示在网格控件内的所有当前视图都可以通过 GridControl.Views 集合来获取。 第一个集合元素始终引用 GridControl.MainView。 其他元素引用由主控行打开的细节克隆视图。 一旦主控行被折叠,则它的细节视图都被删除,并且从 GridControl.Views 集合中移除相应的元素。
XtraGrid 中的视图对象提供了许多方法,来使用行、列和样式。 要获得视图的列集合,可以使用视图的 ColumnView.Columns 属性 (ColumnView 类,是 GridView、LayoutView 和 CardView 类的祖先)。 XtraGrid 中的行由行句柄 (唯一的整数值,指定视图内显示的行的序号) 来标识。 列与卡片字段概述 和 行与卡片概述 文档提供了关于组织 XtraGrid 中的列与行的总说明。 要获得关于样式的信息,请参阅 外观概述 文档。按照上面的说明,模式视图只是作为创建实体视图 (克隆) 的模板。 模式视图不包含数据,在运行时刻也不会被显示在网格控件中。 因此,不可以把与数据相关的方法应用于模式视图,诸如获取/设置行值或展开行。 模式视图仅指定布局和外观设置。 在创建克隆视图时将复制这些设置。 例如,可以创建一个模式视图,并对特定的列进行分组。 所有基于该模式视图的克隆视图都将有分组。
在创建网格控件时,它的 GridControl.MainView 属性已经被设置为 GridView 类的一个实例。 要更改主视图,可以创建一个视图对象,并把它指派到 GridControl.MainView 属性。 XtraGrid 允许使用构造函数或调用网格控件的 GridControl.CreateView 方法来创建视图。 当通过 GridControl.LevelTree 属性把模式视图与主/从关系名称相关联时,创建的视图也是有用的。下列代码展示了如何把一个 BandedGridView 对象指派到网格控件的主视图:
C# | 复制代码 |
---|---|
using DevExpress.XtraGrid.Views.BandedGrid; //Dispose of the old view gridControl1.MainView.Dispose(); //Create a Banded Grid View BandedGridView bandedView = new BandedGridView(gridControl1); gridControl1.MainView = bandedView; //Add one band and one column to the view GridBand band = bandedView.Bands.AddBand("General"); BandedGridColumn column = (BandedGridColumn)bandedView.Columns.AddField("CustomerID"); column.OwnerBand = band; column.Visible = true; |
Visual Basic | 复制代码 |
---|---|
Imports DevExpress.XtraGrid.Views.BandedGrid 'Dispose of the old view GridControl1.MainView.Dispose() 'Create a Banded Grid View Dim bandedView As BandedGridView = New BandedGridView(GridControl1) GridControl1.MainView = bandedView 'Add one band and one column to the view Dim band As GridBand = bandedView.Bands.AddBand("General") Dim column As BandedGridColumn = bandedView.Columns.AddField("CustomerID") column.OwnerBand = band column.Visible = True |