本文档提供了 XtraGrid 控件的绑定数据的特殊之处的概述。
视图
绑定数据源中的数据在 XtraGrid 中使用视图来呈现。 如果数据源包含了单个对象列表,则使用 主视图 呈现该列表,可以通过 GridControl.MainView 属性来访问主视图的设置。 这种被指派到 MainView 属性的对象决定了当前的数据呈现方法。 如果该属性值设置为 GridView 对象 (默认值),则以标准的表格形式呈现数据。 如果该属性值设置为 CardView 对象,则使用卡片布局来呈现数据。
在 GridControl 被绑定到数据源之后,它自动从数据源中获取可用的字段,并且在主视图中创建相应的列。 要禁用此功能,则可以把主视图的 ColumnViewOptionsBehavior.AutoPopulateColumns 属性设置为 false。 如果主视图已经包含特定的列,则把数据源指派到网格控件时,不创建新列。
XtraGrid 也支持分层的数据源,也即在对象列表之间设置有主/从关系的数据源。 如果这种数据源被指派到网格控件,则它的主列表被显示在主视图中,而子列表在运行时刻被显示在独立的细节视图中。 在主/从模式中, XtraGrid 在包含细节数据的行中显示“展开按钮(+)”。 单击“展开按钮”则创建一个显示相应细节记录的细节视图。
在设计时刻,当 GridControl 被绑定到包含主/从关系的数据源时,不自动创建细节视图。 但是,将在运行时刻自动创建细节视图,并且细节视图的类型和设置将从主表视图中复制。
使用 XtraGrid,可以在设计时刻定制特定细节视图的类型和设置。 唯一需要做的事是知道数据源中主/从关系的名称。 然后可以通过 层设计器(Level Designer),把特定的主/从关系与特定的视图相关联。 要创建此关联,则在“层设计器(Level Designer)”中添加一个新 层,或者在代码使用 GridControl.LevelTree 属性来添加。 在 XtraGrid 中的关系通过其名称来识别。
“层设计器(Level Designer)”中的 Retrieve Details(取回细节) 按钮允许从绑定数据源中取回已有关系的名称 (XtraGrid 必须被绑定到 DataTable 对象)。 单击此按钮为所有关系创建层。 但是不把视图指派到层。 可以使用“层设计器(Level Designer)”人工执行此操作。
在默认情况下, GridControl.ShowOnlyPredefinedDetails 属性值设置为 false。 在这种情况下,XtraGrid 可以为所有关系显示细节视图。 如果把 GridControl.ShowOnlyPredefinedDetails 属性设置为 true,则网格控件只显示与视图相关联的关系 (在设计时刻的“层设计器”,或在代码中 LevelTree 属性); 不显示其他关系。 因此,如果没有与视图相关联的任何主/从关系,并且 GridControl.ShowOnlyPredefinedDetails 属性值设置为 true,则网格控件不允许展开任何行来访问细节数据,并且禁用主/从模式。
可以阻止特定主表视图的细节数据被显示。 要执行此操作,则把主表视图的 GridOptionsDetail.EnableMasterViewMode 属性设置为 false。
要获取被显示在特定视图中的数据源,则使用 BaseView.DataSource 属性。 在主/从模式中这是特别有用的。
非绑定列
XtraGrid 不支持直接将记录添加到 GridControl 中的非绑定模式。 而是必须将记录添加到绑定数据源中,然后在 GridControl 中显示。
通常,网格中的列被绑定到数据源中的特定字段。 但是也可以添加非绑定列,它可以显示任何数据,而不仅仅是在数据源中存在的数据。 这种列必须通过事件来人工装载。 请参阅 非绑定列 主题来获得更多信息。
常规数据绑定模式与服务器数据绑定模式
XtraGrid 控件支持两种数据绑定模式,它们的不同之处在于如何从数据存储中取回数据:
- 常规数据绑定模式 是 .NET 中的一种传统数据绑定机制。 数据存储中的数据被加载到数据源组件 (DataSet、BindingSource 等),然后连接到网格控件。 当使用大数据集时这种绑定模式的性能差,这是因为它请求从数据存储中把所有数据加载到内存中。 但是,它能完美地处理中等大小的记录集。
请参阅 传统的数据绑定方法 获得更多信息。
-
服务器模式 被设计用于使用大数据集。 在这种模式中,通过一个特殊设计的数据源对象,把网格控件连接到数据存储,适合于使用巨型记录集 (50,000 条以上记录,但是数据的特定数目取决于具体环境)。 只为网格控件提供小部分数据,而决不是完全加载到内存中。 另外,所有 data-aware(数据感知) 操作都在服务器端执行。 所有这些特性能保证快速显示和处理数据。
请参阅 服务器模式 来获知更多细节。