XtraGrid 控件支持单行选择、多行选择、多单元格选择模式。 后者仅在 GridView 和 BandedGridView 视图内可用。 本主题提供了关于这些模式及相关方法的信息。
单行/单卡片选择模式
可以用于选择/取消选择行与卡片,以及访问选中记录的方法:
成员 | 说明 |
---|---|
ColumnView.FocusedRowHandle | 指定获得焦点的行的句柄。
此属性允许获取有焦点的因而也被选中的行/卡片。 把一个值指派到该属性,则把焦点移动到指定的行/卡片,因而也选中它。 |
ColumnView.SelectAll | 选中视图内的所有行 (卡片)。 |
ColumnView.SelectedRowsCount | 返回当前已选中行的数目。
在这种模式中,单行/单卡片可以获得焦点因而也被选中,因此此属性始终返回 -1。 |
ColumnView.GetSelectedRows |
返回已选中行句柄的数组。
在这种选择模式中,它返回一个包含单个元素的数组,并且标识获得焦点行的句柄。 |
ColumnView.FocusedRowChanged | 允许响应焦点移动到另一行。 |
多行/多卡片选择模式
在这种模式中,每次可以选择多行/多张卡片。 选择行是标记它们的方式,便于后面对它们执行其他操作 (例如,把它们复制到剪贴板、删除、拖动等)。 在默认情况下,已选中行被使用与获得焦点的行相同的方式进行绘制,但是可以使用不同的外观设置来绘制选中行和获得焦点的行。
要启用这种模式,则把视图的 ColumnView.OptionsSelection 对象的 ColumnViewOptionsSelection.MultiSelect 属性设置为 true。 对于 GridView 和 BandedGridView 视图,也需要确保 GridOptionsSelection.MultiSelectMode 属性值被设置为 GridMultiSelectMode.RowSelect (默认值)。
注意,在这种模式中,获得焦点的行并非始终被选中。 由 ColumnView.GetSelectedRows 方法返回的已选中行句柄的数组,可能不包含由 ColumnView.FocusedRowHandle 属性标识的获得焦点的行句柄。
可以用于选中/取消选中行与卡片,以及访问已选中记录的方法:
成员 | 说明 |
---|---|
ColumnView.SelectRow | 把行/卡片加入当前选择。 |
GridView.SelectRows ColumnView.SelectRange |
把一批行/卡片加入选择。 |
ColumnView.UnselectRow | 从当前选择中移去行/卡片。 |
ColumnView.ClearSelection | 取消选中所有行/卡片。 |
ColumnView.FocusedRowHandle | 指定获得焦点行的句柄。
在这种模式中,设置此属性不会选中行/卡片。 |
ColumnView.SelectedRowsCount | 返回当前已选中行的数目。 |
ColumnView.GetSelectedRows | 返回已选中行句柄的数组。 |
ColumnView.SelectionChanged | 当选择状态被改变时,允许执行操作。 |
BaseView.BeginSelection BaseView.EndSelection |
当通过代码执行多个连续的选择更改时,这一对方法能防止过度更新。 请参阅下面的内容。 |
在多选模式中,每当选择被改变时, ColumnView.SelectionChanged 事件都会发生。 可以接管它来执行特定的操作。 要对行焦点从一行移到另一行作出响应 (即使没有使用多选模式),可以接管 ColumnView.FocusedRowChanged 事件。
当多次连续调用更改选择的方法时,最好是把这些调用封闭在 BaseView.BeginSelection/BaseView.EndSelection 方法调用中。 这样能防止 ColumnView.SelectionChanged 事件重复发生,从而提升应用程序的性能。 请参阅 批量更改概述 主题来获得更多信息。
多个单元格选择模式
在这种模式中,最终用户可以选中不间断的单元格块,以及在不同行中的个别单元格。 也可以完整地选中多个行,例如,通过单击 行指示器面板。
这种选择模式只适用于 GridView 和 BandedGridView 视图。 要启用它,则把 ColumnViewOptionsSelection.MultiSelect 属性设置为 true,并把 GridOptionsSelection.MultiSelectMode 属性设置为 GridMultiSelectMode.CellSelect
类似于前一种选择模式,在这种模式中获得焦点的行并非始终被选中。
可以用于选中/取消选中单元格的方法:
成员 | 说明 |
---|---|
GridView.SelectCell | 选中特定的单元格。 |
GridView.SelectCells | 选中一批单元格。 |
ColumnView.SelectAll | 选中视图中的所有行 (卡片)。 |
GridView.UnselectCell | 从当前选择中移去指定的单元格。 |
GridView.UnSelectCells | 从选择中移去指定的单元格块。 |
GridView.GetSelectedCells | 返回选中的单元格。 |
ColumnView.GetSelectedRows | 返回包含选中单元格的行的句柄。 |
也请参阅前面小节给出的“选择”使用方法列表。 在多个单元格选择模式中,使用这些方法会影响属于指定行中的所有单元格。
使用“选择”和行的公共方法
成员 | 说明 |
---|---|
BaseView.CopyToClipboard | 把获得焦点的或选中的记录以文本方式复制到剪贴板。 |
ColumnView.DeleteRow | 删除特定的行/卡片 |
ColumnView.DeleteSelectedRows | 删除获得焦点的或选中的行。 |
ColumnView.GetRow | 返回表示指定行的对象。 |
ColumnView.GetDataRow | 返回表示指定行的 DataRow 对象。 |
ColumnView.GetRowCellValue ColumnView.GetFocusedRowCellValue |
获取行字段中的取值。 |
ColumnView.GetRowCellDisplayText ColumnView.GetFocusedRowCellDisplayText |
获取行的取值的文本表示形式。 |
ColumnView.SetRowCellValue ColumnView.SetFocusedRowCellValue |
为行中的单元格指派取值。 |
最终用户功能
外观设置
在默认情况下,使用相同的外观设置来绘制选中的和获得焦点的行。 要定制它们,则通过视图的 Appearance 对象 (例如 GridView.Appearance、CardView.Appearance 等) 使用下列属性:
成员 | 说明 |
---|---|
GridViewAppearances.FocusedRow | 包含用于绘制当前获得焦点行的外观设置。 |
GridViewAppearances.SelectedRow | 包含用于绘制已选中行的外观设置。 |
GridViewAppearances.HideSelectionRow | 包含在网格控件未获得焦点时,用于绘制已选中行的外观设置。 |
CardViewAppearances.FocusedCardCaption | 包含用于绘制获得焦点的卡片标题的外观设置。 |
CardViewAppearances.SelectedCardCaption | 包含用于绘制选中卡片的标题的外观设置。 |
CardViewAppearances.HideSelectionCardCaption | 包含在网格控件未获得焦点时,用于绘制选中卡片的标题的外观设置。 |
在特定情况下,在 GridView 或它的子对象中,可能需要防止获得焦点的行被高亮显示。 要执行此任务,则把 GridOptionsSelection.EnableAppearanceFocusedRow 属性设置为 false。 通过 GridOptionsSelection.EnableAppearanceFocusedCell 选项,可以禁用对获得焦点的单元格着色。
当网格控件没有获得焦点时,要防止已选中行以特定的方式被高亮显示,则使用 GridOptionsSelection.EnableAppearanceHideSelection 属性。
获取已选中行 —— 一个示例
这个示例展示了如何获取已选中行,以便于修改它们的字段值。 已选中行的句柄由 ColumnView.GetSelectedRows 方法返回。 因为行句柄反映在视图中显示的行顺序,因此如果数据已经排序和/或筛选,则修改单个行可能会影响其他行的句柄。 因此,在本例中通过表示行的 DataRow 对象来修改行。 此对象通过 ColumnView.GetDataRow 方法获取。
请记住当更新多个行时,在每个行更改之后,网格视图都被更新。 因此,为了防止不必要的更新,应该把您的代码封闭在 BaseView.BeginUpdate 和 BaseView.EndUpdate 方法调用内。 请参阅 批量更改概述 文档获知细节。 下面的代码把 Discontinued 字段值修改为 true 来选择行。C# | 复制代码 |
---|---|
// Create an empty list. ArrayList rows = new ArrayList(); // Add the selected rows to the list. for (int i = 0; i < gridView1.SelectedRowsCount; i++) { if (gridView1.GetSelectedRows()[i] >= 0) rows.Add(gridView1.GetDataRow(gridView1.GetSelectedRows()[i])); } try { gridView1.BeginUpdate(); for (int i = 0; i < rows.Count; i++) { DataRow row = rows[i] as DataRow; // Change the field value. row["Discontinued"] = true; } } finally { gridView1.EndUpdate(); } |
Visual Basic | 复制代码 |
---|---|
' Create an empty list. Dim Rows As New ArrayList() ' Add the selected rows to the list. Dim I As Integer For I = 0 To GridView1.SelectedRowsCount() - 1 If (GridView1.GetSelectedRows()(I) >= 0) Then Rows.Add(GridView1.GetDataRow(GridView1.GetSelectedRows()(I))) End If Next Try GridView1.BeginUpdate() For I = 0 To Rows.Count - 1 Dim Row As DataRow = CType(Rows(I), DataRow) ' Change the field value. Row("Discontinued") = True Next Finally GridView1.EndUpdate() End Try |