Goto Data Grid 数据网格
Rows 行
Row Height 行高
数据表格中有两种类型的行:数据行(显示数据源记录)和非数据行(组行、新项目行等)。
默认情况下,行高由字体设置决定。数据网格公开了以下 API 来修改这些高度。
- GridView.RowHeight 网格视图.RowHeight
指定数据行高(以像素为单位)。默认值为 -1(行没有固定高度)。 - GridView.ColumnPanelRowHeight
指定列标题的高度。 - GridView.GroupRowHeight
获取或设置组行的高度。 - GridView.RowSeparatorHeight
指定行之间的垂直距离。将此属性设置为零不会删除行之间的水平线。为此,请禁用 GridOptionsView.ShowHorizontalLines 设置。 - GridView.CalcRowHeight
此事件为每一行重复引发,并允许您为每一行设置单独的高度参数。下面的代码片段说明了如何根据 “RowHeight” 数据源字段中的值设置行高。
Auto Row Height 自动行高
行单元格会剪辑它们无法完全显示的内容。要更改此行为,请使用 MemoEdit、TokenEdit 或 PictureEdit 编辑器作为所需列的就地编辑器,并启用 GridOptionsView.RowAutoHeight 设置。这将允许 Data Grid 数据行动态适应内容并获得不同的高度。
/*
* 自动行高 OptionsView.RowAutoHeight = true
*/
gridView1.OptionsView.RowAutoHeight = false;
Hide Row Borders 隐藏行边框
您可以通过禁用 GridOptionsView.ShowVerticalLines 和 GridOptionsView.ShowHorizontalLines 设置来隐藏列和行边框。
/*
* 隐藏行边框
* 您可以通过禁用GridOptionsView来隐藏列和行边界。 GridOptionsView.ShowVerticalLines 和 GridOptionsView.ShowHorizontalLines
*/
gridView1.OptionsView.ShowVerticalLines = DefaultBoolean.True;
gridView1.OptionsView.ShowHorizontalLines = DefaultBoolean.True;
Row Indicator Panel 行指示器面板
行指示器面板是停靠在数据网格左边缘的水平条带。用户可以单击此栏以选择任何数据网格行。
Row Multi-Select 行多选
如果启用了 ColumnViewOptionsSelection.MultiSelect 选项,则最终用户可以使用选取框选择、键盘箭头键和按住 Ctrl/Shift 键的鼠标单击来选择多行。
Related API 相关 API
- ColumnView.SelectRow - 将行(卡)添加到当前选择。
- ColumnView.GetSelectedRows - 返回所选行(或卡)的句柄。
- ColumnView.DeleteSelectedRows - 在多选模式下删除所选行/卡,或在单选模式下删除焦点行/卡。
Web Style Row Selection Web 样式行选择
除了单击行指示器面板外,用户还可以使用复选框来选择数据行。若要启用这些复选框,请将 GridOptionsSelection.MultiSelectMode 属性设置为 GridMultiSelectMode.CheckBoxRowSelect 值。仅当启用行多选时,Web 样式选择才可用。
/*
* 复选框列
*/
gridView1.OptionsSelection.MultiSelectMode = DevExpress.XtraGrid.Views.Grid.GridMultiSelectMode.CheckBoxRowSelect;
gridView1.OptionsSelection.MultiSelect = true;
gridView1.OptionsSelection.CheckBoxSelectorColumnWidth = 45;//设置复选框列的宽度
Accessing Rows in Code - Row Handles 访问代码中的行 - 行句柄
每个数据网格行都有三个用于标识它的整数值:数据源索引、行句柄和可见索引。
Data source indexes 数据源索引
- 在绑定列表中指定从零开始的行索引。
- 是在对数据进行排序、分组或筛选时不会更改的常量值。
- 对于组行,它们将指向组中的第一个数据行。
- Used for accessing data. 用于访问数据。
Row handles 行控点
- 从零开始的索引,对应于从上到下的行顺序。
- 组行控点是以 -1 开头的负值。该顺序与组行从上到下的顺序匹配。
- 该网格为 New Item Row、Auto Filter Row 和 Invalid Row 指定保留的行句柄。
- 行句柄在每次数据操作后都会重新分配给行。
- 筛选 View 时,仅为与筛选条件匹配的行创建行和行控点。
Visible indexes 可见索引
- 从零开始的索引,从上到下匹配可见行的顺序。
- 如果服务行显示在数据和组行上方,则会为其分配负索引。
- 在每次数据操作(包括数据排序、分组和筛选)之后,都会重新分配可见索引。
- 可见索引仅分配给展开组中的行。因此,索引在每次展开/折叠操作后都会更新。
对于主从数据,所有明细视图都有自己唯一的可见索引和行句柄。
Related API 相关 API
- ColumnView.FocusedRowHandle — 返回当前聚焦行的行句柄。若要获取焦点行中显示的记录,请使用 GetFocusedRow 和 GetFocusedDataRow 方法。
- ColumnView.LocateByValue — 允许您通过行单元格值获取行句柄。
- ColumnView.IsDataRow(Int32) — 返回具有给定句柄的行是否为常规数据行(不是组行、自动筛选行等)。
- ColumnView.GetRowHandle、ColumnView.GetDataSourceRowIndex — 按数据源中相关记录的索引返回行句柄,反之亦然。
- ColumnView.GetVisibleIndex, ColumnView.GetVisibleRowHandle — 按行的可见索引返回行句柄,反之亦然。
- ColumnView.GetRow, ColumnView.GetDataRow — 返回一个对象,该对象是具有给定句柄的行。
- GridControl.NewItemRowHandle、GridControl.AutoFilterRowHandle — 分别指定新项和自动筛选行的行句柄的数字常量。
- GridControl.InvalidRowHandle — 当 Grid 无法获取特定行时返回的常量。例如,如果 GridView.GroupRowCollapsing 事件参数在所有数据网格组同时折叠时触发此事件(例如,在调用 GridView.CollapseAllGroups 方法之后),则此事件将返回无效的行句柄。
- GridView.TopRowIndex — 将 View 向上或向下滚动到具有所需可见索引的行。
Row Count 行计数
GridView.RowCount 属性返回视图中当前可见的记录数。当数字发生变化时,将触发 BaseView.RowCountChanged 事件。例如,您可以处理此事件以显示一个表单,该表单允许用户在没有记录满足当前搜索查询时创建新记录。
using DevExpress.XtraGrid.Views.Grid;
private void gridView1_RowCountChanged(object sender, EventArgs e) {
GridView view = sender as GridView;
if(view.RowCount == 0) {
using(var form = new SpaceObjectForm())
form.ShowDialog();
}
}
Traversing Rows 遍历行
当您需要逐个处理所有数据网格行时,请使用以下技术。
- 获取 BaseView.DataRowCount 属性值以确定现有行数,或获取 BaseView.RowCount 属性以仅获取当前可见行数。
- 要更改所有现有行,请实现一个循环,该循环遍历从 0 到 DataRowCount - 1 的行句柄。
- 如果只需要处理可见行,请从具有零句柄的行开始,然后通过调用 ColumnView.GetNextVisibleRow 方法获取下一行。
- 将循环包装在 ColumnView.BeginSort/ColumnView.EndSort 方法对中,以防止在处理行时重新加载数据。否则,更改单元格值可能会更改行顺序(以及行手柄),这将导致行处理算法出现故障。
CheckBox复选框列实现单选功能
本文介绍了如何通过DevExpress的GridView控件实现复选框列的单选功能。首先设置了GridView显示复选框列的代码,然后在SelectionChanged事件中处理单选逻辑,清除所有已选行并选择当前行。如果需要禁止不选状态,可以直接清除所有选择并选中当前行。代码示例展示了如何在C#中实现这一功能。
//设置显示复选框列
gridview.OptionsSelection.MultiSelectMode = DevExpress.XtraGrid.Views.Grid.GridMultiSelectMode.CheckBoxRowSelect;
gridview.OptionsSelection.MultiSelect = true;
gridview.OptionsSelection.CheckBoxSelectorColumnWidth = 45;//设置复选框列的宽度
那么想实现单选的功能就需要检测选择操作时候对其他行的CheckBox进行取消选择,GridView提供了一个SelectionChanged事件,我们只需要在这个事件监听这个操作,每次触发的时候清除所有选择行(gridView.ClearSelection())然后再选择当前行即可,直接上代码:
/// <summary>
/// 设置GridView单选
/// </summary>
/// <param name="view"></param>
/// <param name="selectCaption"></param>
public static void SetGridViewSingleSelect(DevExpress.XtraGrid.Views.Grid.GridView view,string selectCaption="选择")
{
if (view == null) return;
//设置显示复选框列
view.OptionsSelection.MultiSelectMode = DevExpress.XtraGrid.Views.Grid.GridMultiSelectMode.CheckBoxRowSelect;
view.OptionsSelection.MultiSelect = true;
view.OptionsSelection.CheckBoxSelectorColumnWidth = 45;
view.OptionsSelection.ShowCheckBoxSelectorInColumnHeader = DevExpress.Utils.DefaultBoolean.False;//列标题不显示CheckBox,控制不能全选
//
var selectCol=view.VisibleColumns[0];
if(selectCol.FieldName== "DX$CheckboxSelectorColumn")
{
selectCol.Caption = selectCaption;
}
view.SelectionChanged += onSelectChanged;
void onSelectChanged(object sender , DevExpress.Data.SelectionChangedEventArgs e)
{
//注销事件,防止以下操作反复触发该事件
view.SelectionChanged -= onSelectChanged;
//清除所有选择
view.ClearSelection();
if (e.Action == CollectionChangeAction.Add)//选中
{
view.SelectRow(e.ControllerRow);
}
else if (e.Action == CollectionChangeAction.Remove)//取消选中
{
view.UnselectRow(e.ControllerRow);
}
view.SelectionChanged += onSelectChanged;
}
}