Goto Data Grid 数据网格
Filter and Search 筛选和搜索
Filter Drop-down Menus (Excel-style) 筛选器下拉菜单(Excel 样式)
要调用列的筛选器下拉菜单,请单击列标题中的筛选器图标。在 “Values” 选项卡中,用户可以从 Data Grid 显示的单元格值中选择特定的单元格值。
“过滤器”选项卡为用户提供了更广泛的过滤器选项池。例如,当用户按日期筛选数据时,您可以仅显示与上周对应的记录。
过滤器下拉菜单的内容取决于相关网格列显示的数据类型。例如,下图说明了当数据按数字列筛选时,此菜单的外观。
这种类型的过滤器下拉菜单称为 “Excel-style”,是 v17.1 及更高版本中的默认过滤器菜单类型。
Related API 相关 API
- GridOptionsCustomization.AllowFilter — 禁用整个数据网格的数据筛选功能。
- OptionsColumnFilter.AllowFilter — 禁用特定列的筛选功能。
- ColumnView.ColumnFilterChanged — 当列的筛选条件更改时发生。当 Find Panel 完成搜索时,也会引发此事件。
- ColumnViewOptionsFilter.ColumnFilterPopupMode — 如果您的 DevExpress 安装版本低于 v17.1,请将此设置切换到 Excel 以启用 Excel 样式的筛选器下拉菜单。
- ColumnView.OptionsFilter — 提供对影响所有列的筛选器菜单的设置的访问。有关可用设置的列表,请参阅 ColumnViewOptionsFilter 类成员。
- GridColumn.OptionsFilter — 提供对特定列的筛选设置的访问。有关可用设置的列表,请参阅 OptionsColumnFilter 类成员。
- ColumnView.ShowFilterPopupExcel — 处理此事件以自定义 Excel 样式的筛选器。
请参阅以下主题以了解如何动态自定义 Excel 样式的菜单:高级筛选器和搜索概念。
Classic Filter Drop-down Menus 下拉菜单
数据网格可以显示经典的筛选器菜单,而不是 Excel 样式的下拉菜单。经典筛选器菜单包括 DateTime 列的日历和其他类型列的常规下拉菜单。
Related API: 相关 API:
- ColumnViewOptionsFilter.ColumnFilterPopupMode — 将此属性设置为 Classic 以在 v17.1 及更高版本中启用经典筛选器下拉菜单。经典菜单已在旧版本中启用。
- WindowsFormsSettings.DefaultSettingsCompatibilityMode — 允许您启用经典筛选器下拉菜单的替代属性。要启用经典筛选器菜单,请将此属性设置为 v16。
- ColumnViewOptionsFilter.ColumnFilterPopupRowCount — 获取或设置常规下拉菜单可以同时显示的最大项数。
- ColumnViewOptionsFilter.AllowColumnMRUFilterList — 如果启用此属性,则常规下拉列表会记住用户最近选择的值。这些值显示在默认的 “Custom” 项之前。
- OptionsColumnFilter.ShowBlanksFilterItems — 获取或设置“(Blanks)”和“(Non Blanks)”项在筛选器下拉菜单中是否可用。
- ColumnView.ColumnFilterChanged - 当列的筛选条件发生更改时发生。当 Find Panel 完成搜索时,也会引发此事件。
您还可以使用检查列表菜单而不是常规下拉菜单。
Related API: 相关 API:
-
OptionsColumnFilter.FilterPopupMode — 将属性设置为 CheckedList 以启用此筛选器菜单样式。
-
ColumnViewOptionsFilter.ShowAllTableValuesInCheckedFilterPopup — 获取或设置选中的筛选器下拉列表是显示所有数据源记录中的唯一值,还是仅显示满足当前筛选条件的记录中的唯一值。
-
ColumnView.ShowFilterPopupCheckedListBox — 此事件允许您修改检查列表筛选器菜单中的项目,包括标准的“全选”项目。
您还可以将日历筛选器菜单替换为选中列表。此外,您还可以在三种类型的基于日历的菜单之间进行选择:DateSmart(默认菜单类型)、DateAlt 和 Date。下图说明了 DateAlt 菜单。
所有这些菜单都包含相同的日历,该日历选择特定日期,但具有不同的日期间隔集。下表列出了其中的几个间隔。
Related API: 相关 API:
-
OptionsColumnFilter.FilterPopupMode — 将此属性设置为 Date、DateSmart 或 DateAlt 以选择所需的基于日历的下拉菜单。
-
OptionsColumnFilter.ImmediateUpdatePopupDateFilterOnCheck — 如果启用此设置,则在用户切换基于日历的菜单复选框后立即应用筛选器。
-
OptionsColumnFilter.ImmediateUpdatePopupDateFilterOnDateChange — 如果启用此设置,则在用户在基于日历的菜单中选择日期(或日期范围)后,将立即应用筛选器。
-
OptionsColumnFilter.ShowEmptyDateFilter — 获取或设置下拉菜单是否显示“Show Empty”筛选器。用户可以检查此筛选器以查看在相应的 DateTime 列中没有值的记录。
Automatic Filter Row 自动筛选行
在运行时筛选数据的另一种方法是使用 Automatic Filter Row。此行显示在常规数据行的上方,允许用户键入筛选条件值(包括“*”和“%”通配符)并选择筛选条件运算符(NotLike、Equals、Between 等)。
请注意,显示在 Automatic Filter Row 中的单元格编辑器会忽略其掩码,并允许用户输入任何字符。
请注意,如果 Auto Filter Row 单元格使用 RepositoryItemRichTextEdit 就地编辑器,则用户只能为此单元格选择“Like”筛选条件。其他条件(“开头为”、“等于”等)不适用于 RTF 值。
Related API: 相关 API:
- GridOptionsView.ShowAutoFilterRow — 管理 Automatic Filter Row 的可见性。
- OptionsColumnFilter.AllowAutoFilter — 允许您从 Automatic Filter Row (自动筛选行) 中排除特定列,而不隐藏整行。
- GridView.PopupMenuShowing — 允许您隐藏或删除特定条件。
- GridOptionsFilter.AllowAutoFilterConditionChange — 指定自动筛选行的条件选择器是否可见。如果禁用此选择器,则将使用以下运算符比较输入的值:“等于”(用于 CheckEdit、LookUpEdit 和 ImageComboBoxEdit 列)或“喜欢”(用于其他列)。
- OptionsColumnFilter.AutoFilterCondition — 指定此列的筛选条件运算符(“Equals”、“Like”、“Greater”等)。
- OptionsColumnFilter.ImmediateUpdateAutoFilter — 如果启用此设置,则数据网格将在用户修改筛选条件后立即筛选其记录。否则,在用户按 Enter 键或将焦点移动到另一个单元格之前,不会应用筛选器。
- GridView.ShowAutoFilterConditionsMenu — 从代码中调用此方法以调用特定列的 Automatic Filter Row 弹出菜单。
- GridView.GetAutoFilterValue、GridView.SetAutoFilterValue — 允许您检索当前应用的自动筛选行条件并从代码中应用新条件的方法。
Filter Panel Filter 面板
应用过滤器时,View (视图) 将显示一个过滤器面板。用户可以使用此面板来修改和删除当前过滤器。
Related API: 相关 API:
- ColumnViewOptionsView.ShowFilterPanelMode — 管理筛选器面板的可见性。
- ColumnView.ActiveFilterEnabled — 允许您打开或关闭当前筛选器。
- ColumnViewOptionsFilter.AllowMRUFilterList — 允许您隐藏使用最近应用的筛选器调用列表的按钮。
- ColumnViewOptionsFilter.AllowFilterEditor — 控制“编辑筛选器”按钮的可见性。
Incremental Search 增量搜索
用户可以聚焦网格列并开始键入。Data Grid 聚焦并突出显示第一个匹配记录。要查找其他记录,请按 Ctrl+Up 和 Ctrl+Down 热键。
- GridOptionsBehavior.AllowIncrementalSearch — 启用或禁用增量搜索。
- ColumnView.GetIncrementalText — 返回在增量搜索期间搜索的文本。
- GridView.StartIncrementalSearch、GridView.StopIncrementalSearch — 从代码中调用这些方法以手动触发和取消增量搜索。
Filter Editor 过滤器编辑器
Filter Editor 对话框允许用户构建复杂的筛选条件,这些条件由多个表达式组合而成。要调用此对话框,用户可以执行以下操作之一:
- 单击 Filter 面板中的 “Edit Filter”。
- 在常规的下拉过滤器菜单中选择“(自定义)”。
- 右键单击列标题并选择 “Filter Editor”。
您可以修改 ColumnViewOptionsFilter.DefaultFilterEditorView 属性,以启用筛选器编辑器的“文本”面板/选项卡,用户可以在其中手动键入筛选器表达式。
Related API: 相关 API:
- ColumnViewOptionsFilter.AllowFilterEditor — 获取或设置筛选器编辑器是否可用。
- ColumnView.CustomFilterDialog — 处理此事件以更改用户单击“自定义”筛选器下拉菜单项时的默认行为。请参阅以下主题以了解更多信息:高级筛选和搜索概念。
- ColumnView.FilterEditorCreated — 当 Filter Editor 即将显示时,将触发此事件。该事件允许您自定义 Editor 对话框或阻止其显示。
- ColumnViewOptionsFilter.UseNewCustomFilterDialog — 启用此属性后,用户不仅可以根据常量自定义值筛选 GridColumn 的值,还可以根据其他 GridColumn 的值进行筛选。
- ColumnViewOptionsFilter.FilterEditorAggregateEditing — 此属性指定用户是否可以基于集合属性创建筛选器。
以下代码片段允许用户使用 SpinEdit 和 CalcEdit 编辑器筛选 “Price” 列数据。
private void GridView1_FilterEditorCreated(object sender, DevExpress.XtraGrid.Views.Base.FilterControlEventArgs e) {e.FilterControl.BeforeShowValueEditor += FilterControl_BeforeShowValueEditor;
}
RepositoryItemSpinEdit reSpinEdit = new RepositoryItemSpinEdit();
RepositoryItemCalcEdit reCalcEdit = new RepositoryItemCalcEdit();
private void FilterControl_BeforeShowValueEditor(object sender, DevExpress.XtraEditors.Filtering.ShowValueEditorEventArgs e) {if (e.CurrentNode.FirstOperand.PropertyName != "Price") return;RepositoryItemTextEdit item = null;if (e.FocusedElementIndex == 2)item = reSpinEdit;elseitem = reCalcEdit;item.Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.Numeric;item.Mask.EditMask = "c";e.CustomRepositoryItem = item;
}
Find Panel “查找”面板
“查找面板”允许用户应用临时筛选器,以一次筛选所有数据网格列中的数据。要调用此面板,请在运行时按 “Ctrl+F”。键入您需要搜索的文本,然后按 Enter 或单击“查找”。
请注意,“查找”面板不会突出显示包含 HTML 文本的单元格。
- ColumnViewOptionsFind.AllowFindPanel — 管理“查找”面板的可用性。
- ColumnViewOptionsFind.Behavior — 获取或设置是否隐藏与查询不匹配的记录。
- ColumnViewOptionsFind.ParserKind — 如果输入到“查找”面板中的文本包含空格,则面板会将此字符串拆分为单独的逻辑块。ParserKind 设置指定如何将这些块组合到搜索查询中。
- ColumnViewOptionsFind.Condition — 获取或设置数据网格搜索输入到“查找面板”中的字符串所依据的条件。
- ColumnViewOptionsFind.FindMode — 获取或设置用户是必须按 Enter 还是单击“查找”按钮才能开始搜索,还是在一定延迟后自动启动(ColumnViewOptionsFind.FindDelay 属性)。
- ColumnViewOptionsFind.AllowFindInExpandedDetails — 获取或设置是否在展开的详细信息视图中搜索数据。
Search in Column Headers 在列标题中搜索
您可以使用 GridView.OptionsFilter.InHeaderSearchMode 属性在 View 的列标题中启用内置搜索框。搜索框用于筛选列数据或按列搜索,具体取决于您选择的模式。
- ‘TextFilter’ Mode ‘TextFilter’ 模式
用户可以在搜索框中键入文本以筛选列。 - ‘TextSearch’ Mode “TextSearch” 模式
用户可以在搜索框中键入文本来搜索列数据。网格将突出显示与指定搜索字符串匹配的单元格文本。