GoTo 数据网格和视图入门
GridView是默认的数据网格视图,以传统的表格格式显示数据。“视图”将数据源记录渲染为行,将数据源字段渲染为列。数据值显示在各个单元格中。
Grid Columns
网格列
重要注意事项
不能将多个数据网格列绑定到同一数据源字段。如果需要执行此操作,请创建Unbound Columns并处理CustomUnboundColumnData事件,以手动将数据源值复制到未绑定的列单元格。此限制也适用于其他数据感知控件(数据网格、树状列表、垂直网格等)。
列字段名称必须唯一。
有关其他数据感知控件中类似功能的信息,请参阅以下帮助文章:列(树状列表)、行(垂直网格)、数据透视网格字段(数据透视网格)。
自动列生成
将数据网格绑定到数据源时,控件会自动为每个绑定的数据字段生成一列(如果未禁用“自动填充列”属性)。对于代码优先的数据源(例如,实体框架模型),可以使用Display属性标记属性,并禁用其AutoGenerateField参数以跳过此属性的列生成。下面代码中的“Display”属性阻止数据网格生成“Additional Info”列。
[Display(AutoGenerateField = false, Description = "This column isn't created")]
public string AdditionalInfo {
get; set; }
您可以使用更多的属性来重新排列列、修改其标题的标题、更改其默认的就地编辑器等。请参阅以下主题了解更多信息:数据注释属性。
如果将以前的数据源替换为新的数据源,数据网格将不会自动重新生成列。您需要手动执行此操作,方法是调用数据网格设计器并单击“列”选项卡中的“检索字段”按钮。
要在代码中执行相同操作,请调用BaseView.PopulateColumns。在更改数据源后直接填充列方法,或在GridControl上填充列方法GridControl.DataSourceChanged事件。
手动添加和删除列
-
与数据源中声明的数据字段相关联的列称为绑定列。要手动添加此类列,请调用数据网格设计器,切换到“Columns”选项卡并单击“Show Field List”按钮,然后将数据字段拖动到列列表中。没有相应网格列的数据字段将用粗体文本突出显示。
-
也可以在同一个设计器页面上使用“Add Column” and “Insert Column”按钮。在这种情况下,您需要设置每列的GridColumn.FieldName属性。否则,列将被解除绑定,并且不会从数据源接收单元格值。
-
要删除列,请使用“Remove Column”设计器按钮,或者在设计时单击列标题并按“Delete”键。若要删除代码中的列,请调用GridView.Columns.Remove方法。
-
即使将代码中创建的列添加到Columns集合中,这些列也是不可见的。若要显示列,请启用其“可见”属性。也可以使用AddVisible方法创建列,将其绑定到指定的数据字段,然后在视图中显示。
// Create a new column.
GridColumn colPrice = new GridColumn();
// Bind the column to the 'Price' field in a data source.
colPrice.FieldName = "Price";
// Adds the column to the Columns collection. The column is hidden.
gridView.Columns.Add(colPrice);
// Creates a new column, binds it to the 'OrderDate' field in a data source,
// and displays it in the Grid View.
gridView.Columns.AddVisible("OrderDate");
行标题
要修改列标题并添加图像,请在设计时选择一列并调用其智能标记。如果某列未分配标题,则该列将根据相关数据字段的名称生成标题。
隐藏垂直列边框
您可以通过禁用GridOptionsView来隐藏列和行边界。显示垂直线和网格选项视图。显示水平线设置。GridOptionsView.ShowVerticalLines and GridOptionsView.ShowHorizontalLines
列宽
数据网格将其所有列压缩到其当前客户端区域中。用户可以调整除最后一列以外的所有列的大小,并且总列宽不能超过父视图的宽度。
禁用GridOptionsView.ColumnAutoWidth属性,以允许网格列超越视图边界。如果列占用的空间大于视图提供的空间,则会自动显示水平滚动条。
相关API
- GridColumn.MinWidth, GridColumn.Width, GridColumn.Resize -允许您手动设置列宽。如果GridOptionsView.ColumnAutoWidth属性未被禁用,当前列宽可能与您的自定义设置不同。
- GridColumn.VisibleWidth -检索当前列宽。
- GridView.ColumnWidthChanged - 在更改列宽后发生。
- BaseView.IsSizingState / GridView.IsSizingState - 允许您识别最终用户当前是否正在调整网格列的大小。
- OptionsColumn.FixedWidth - 在列自动宽度模式下,启用此设置可防止列自动调整大小。
最佳适配
为了确保一列或视图的所有列具有足够的宽度,以便单元格完全显示其内容,最终用户可以右键单击列标题,然后选择“最佳匹配”(或“最佳匹配(所有列)”)选项。
相关API
- GridView.BestFitColumns–将最佳拟合应用于所有列。
- GridColumn.BestFit–将最佳拟合应用于一个特定列。
- GridOptionsView.BestFitMaxRowCount–最佳拟合操作扫描所有网格行以确定最佳列宽。此属性允许您限制已处理的行数,从而提高整体网格性能。
- GridOptionsView.BestFitMode–允许您选择最佳拟合操作是优先考虑精度还是计算速度
自动填充列
分配给GridView.AutoFillColumn属性会自动调整大小以填充视图提供的任何可用空间。在下面的动画中,自动填充列为“地址”。
固定列
将列CompanyName的“Fixed”属性设置为“Left”或“Right”,以将该列定位到视图的相应侧。当用户水平滚动视图时,固定列仍然可见。
如果将“Fixed”特性设置为“MiddleLeft”,则直到用户将该列滚动到视图的左侧,该列才会被定位。当列到达左侧时,它将变为固定列,而其他列将继续滚动。
使用FixedColumnHighlightMode属性可以区分固定列和常规列。
Fixed Columns演示演示了如何为网格列提供自定义弹出菜单,允许用户在运行时定位列。
相关API
GridView.FixedLineWidth
GridViewAppearances.FixedLine
默认情况下,最终用户可以执行以下操作
- 拖动右列边缘以调整其大小。
Related API: OptionsColumn.AllowSize, GridOptionsCustomization.AllowColumnResizing.
- 拖放列标题可以重新排列列。
Related API: OptionsColumn.AllowMove, GridOptionsCustomization.AllowColumnMoving.
- 通过向下拖动列标题或右键单击标题并选择“隐藏此列”选项来隐藏列。
Related API: OptionsColumn.AllowShowHide, GridOptionsCustomization.AllowQuickHideColumns.
- 右键单击列标题并选择“列选择器”选项以调用一个对话框,该对话框允许用户将隐藏的列拖回视图。
Related API: GridView.CustomizationFormBounds, GridOptionsCustomization.CustomizationFormSearchBoxVisible, GridView.CustomizationForm, GridView.ShowCustomizationForm
- 将列标题拖动到组区域中以应用分组。
Related API: OptionsColumn.AllowGroup, GridOptionsCustomization.AllowGroup
- 单击列标题可按此列的值对数据进行排序。随后的单击会将排序顺序从升序更改为降序和降序。
Related API: OptionsColumn.AllowSort, GridOptionsCustomization.AllowSort
- 单击列标题中的筛选按钮以筛选网格数据。
Related API: OptionsColumnFilter.AllowFilter, GridOptionsCustomization.AllowFilter
代码识别和访问的网格列
要检索特定列,请使用以下API:
- ColumnView.Columns
存储属于此视图的所有列,并通过索引或相关数据字段名称提供对这些列的访问。
- ColumnView.FocusedColumn
检索当前关注的单元格所属的列。
- ColumnView.GetVisibleColumn
按列的可见索引(GridColumn.VisibleIndex属性)返回列。
Unbound Columns
未绑定列
未绑定列是显示任何自定义数据的网格列。您可以使用未绑定的列来显示来自外部源的数据,将多个数据源合并为一个数据源,或者使用表达式基于其他列数据计算值。
未绑定列和常规绑定列是同一类的对象:GridColumn、BandedGridColumn或LayoutViewColumn类。这意味着未绑定列完全支持所有列功能——排序、分组、筛选、摘要等。
但是,即使所有列都未绑定,数据网格也无法在没有数据源的情况下运行。例如,使用UnboundSource组件来告诉数据网格它应该生成多少行。
创建未绑定的列
要添加未绑定的列,请调用数据网格设计器的“Columns”选项卡,然后单击“Add Column”按钮。在特性网格中,设置两个特性:
- GridColumn.FieldName–必须将此属性设置为与任何数据源字段名称都不匹配的唯一值。
- GridColumn.UnboundDataType–将此属性设置为列应显示的数据类型。列自动使用与所选数据类型相对应的在位编辑器
如果在代码中添加未绑定的列,请记住显式设置它们的可见性。
未绑定表达式
使用未绑定表达式,可以基于其他列值计算未绑定列的值。表达式是在“表达式编辑器”对话框中构建的。要调用此对话框,请单击GridColumn旁边的省略号按钮。VS属性网格中的UnboundExpression属性。
在代码中,表达式被指定为简单字符串。例如,下面的代码通过从。
UnboundExpression = "[charge_total]*10",
gridView1.Columns.Add(new DevExpress.XtraGrid.Columns.GridColumn()
{
Caption = "Custom Unbound Column",
FieldName = "UnboundColumn3",
UnboundDataType = typeof(string),
UnboundExpression = "[charge_total]*10",
Visible = true
});
在运行时修改未绑定的表达式
用户可以右键单击未绑定列的标题,然后选择“Expression Editor…”来修改表达式。您可以选择用户是使用旧版编辑器(与您在设计时使用的编辑器相同),还是使用支持语法高亮显示和自动完成的更新版本。