Rows 行

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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值