应用筛选器时,“视图”仅显示符合当前筛选条件的记录。您可以根据一列或多列筛选数据。如果针对多个列进行筛选,则网格会在列筛选器之间应用AND逻辑运算符。
GridControl-Grid View
大多数DevExpress数据感知组件(数据网格、树列表、垂直网格等)都有与本主题中描述的类似的过滤器UI和API。
筛选下拉菜单(Excel样式)
要调用列的筛选器下拉菜单,请单击列标题中的筛选器图标。在“值”选项卡中,用户可以从数据网格显示的值中选择特定的单元格值。
“过滤器”选项卡为用户提供了更广泛的过滤器选项库。例如,当用户按日期筛选数据时,您只能显示与前一周相对应的记录。
过滤器下拉菜单的内容取决于相关网格列显示的数据类型。例如,下图说明了当数据按数字列进行筛选时,此菜单的外观。
相关API
- GridOptionsCustomization.AllowFilter --禁用整个数据网格的数据筛选器功能。
- OptionsColumnFilter.AllowFilter --禁用特定列的筛选器功能。
- ColumnView.ColumnFilterChanged --在列的筛选条件更改时发生。当“查找面板”完成搜索时,也会引发此事件。
- ColumnViewOptionsFilter.ColumnFilterPopupMode ——如果您的DevExpress安装版本早于v17.1,请将此设置切换到Excel以启用Excel样式的筛选器下拉菜单。
- ColumnView.OptionsFilter --提供对影响所有列的筛选器菜单的设置的访问权限。有关可用设置的列表,请参阅ColumnViewOptionsFilter类成员。
- GridColumn.OptionsFilter–提供对特定列的筛选器设置的访问权限。有关可用设置的列表,请参阅Options ColumnFilter类成员。
- ColumnView.ShowFilterPopupExcel --处理此事件以自定义Excel样式的筛选器。
经典过滤器下拉菜单
数据网格可以显示经典的筛选菜单,而不是Excel样式的下拉菜单。经典筛选菜单包括DateTime列的日历和其他类型列的常规下拉菜单。
相关API:
- ColumnViewOptionsFilter.ColumnFilterPopupMode --将此属性设置为“经典”以在v17.1及更高版本中启用经典过滤器下拉菜单。旧版本中已启用经典菜单。
- WindowsFormsSettings.DefaultSettingsCompatibilityMode --允许启用经典筛选器下拉菜单的替代属性。若要启用经典过滤器菜单,请将此属性设置为v16。
- ColumnViewOptionsFilter.ColumnFilterPopupRowCount --获取或设置常规下拉菜单可以同时显示的最大项数。
- ColumnViewOptionsFilter.AllowColumnMRUFilterList --如果启用了此属性,则常规下拉列表会记住用户最近选择的值。这些值显示在默认的“自定义”项之前。
- OptionsColumnFilter.ShowBlanksFilterItems --获取或设置“(空白)”和“(非空白)”项在筛选器下拉菜单中是否可用。
- ColumnView.ColumnFilterChanged -在列的筛选条件更改时发生。当“查找面板”完成搜索时,也会引发此事件。
也可以使用复选列表菜单,而不是常规下拉菜单。
相关API:
- OptionsColumnFilter.FilterPopupMode --将属性设置为CheckedList以启用此筛选器菜单样式。
- ColumnViewOptionsFilter.ShowAllTableValuesInCheckedFilterPopup --获取或设置选中的筛选器下拉列表是显示所有数据源记录中的唯一值,还是仅显示符合当前筛选条件的记录中的值。
- ColumnView.ShowFilterPopupCheckedListBox–此事件允许您修改已检查列表筛选器菜单中的项目,包括标准的“全选”项目。
您也可以用选中的列表替换日历筛选菜单。此外,您可以在三种类型的基于日历的菜单之间进行选择:DateSmart(默认菜单类型)、DateAlt和Date。下图显示了DateAlt菜单。
所有这些菜单都包含相同的日历,该日历选择特定的日期,但具有不同的日期间隔集。下表列出了其中的几个间隔。
相关API:
- OptionsColumnFilter.FilterPopupMode --将此属性设置为Date、DateSmart或DateAlt以选择所需的基于日历的下拉菜单。
- OptionsColumnFilter.ImmediateUpdatePopupDateFilterOnCheck --如果启用此设置,则在用户切换基于日历的菜单复选框后立即应用筛选器。
- OptionsColumnFilter.ImmediateUpdatePopupDateFilterOnDateChange --如果启用此设置,则在用户在基于日历的菜单中选择日期(或日期范围)后立即应用筛选器。
- OptionsColumnFilter.ShowEmptyDateFilter --获取或设置下拉菜单是否显示“ShowEmpty”筛选器。用户可以选中此筛选器以查看在相应的DateTime列中没有值的记录。
自动筛选行
在运行时筛选数据的另一种方法是使用自动筛选行。此行显示在常规数据行上方,允许用户键入筛选值(包括“*”和“%”通配符)并选择筛选运算符(NotLike、Equals、Between等)。
请注意,显示在“自动筛选行”中的单元格编辑器会忽略它们的掩码,并允许用户输入任何字符。以下代码片段演示了如何保持自动筛选行的数字掩码处于活动状态:
private void GridView1_ShownEditor(object sender, System.EventArgs e) {
GridView view = sender as GridView;
TextEdit edit = view.ActiveEditor as TextEdit;
if (edit != null && view.IsFilterRow(view.FocusedRowHandle))
edit.Properties.Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.Numeric;
}
请注意,如果“自动筛选行”单元格使用RepositoryItemRichTextEdit在位编辑器,则用户只能为此单元格选择“类似”筛选条件。其他条件(“以开头”、“等于”等)不适用于RTF值。
相关API:
- GridOptionsView.ShowAutoFilterRow --管理自动筛选行的可见性。
- OptionsColumnFilter.AllowAutoFilter --允许您从自动筛选行中排除特定列,而不隐藏整行。
- GridView.PopupMenuShowing --允许您隐藏或删除特定条件。
- GridOptionsFilter.AllowAutoFilterConditionChange --指定自动筛选行的条件选择器是否可见。如果禁用此选择器,将使用以下运算符比较输入的值:“Equals”(用于CheckEdit、LookUpEdit和ImageComboBoxEdit列)或“Like”(用于其他列)。
- OptionsColumnFilter.AutoFilterCondition --指定此列的筛选条件运算符(“等于”、“类似”、“更大”等)。
- OptionsColumnFilter.ImmediateUpdateAutoFilter --如果启用此设置,则数据网格会在用户修改筛选条件后立即筛选其记录。否则,在用户按下Enter键或将焦点移动到另一个单元格之前,不会应用过滤器。
- GridView.ShowAutoFilterConditionsMenu --从代码中调用此方法以调用特定列的自动筛选行弹出菜单。
- GridView.GetAutoFilterValue, GridView.SetAutoFilterValue --允许您检索当前应用的自动筛选行条件并从代码中应用新条件的方法。
过滤器面板
应用过滤器时,“视图”会显示一个过滤器面板。用户可以使用此面板来修改和删除当前过滤器。
相关API:
- ColumnViewOptionsView.ShowFilterPanelMode --管理筛选器面板的可见性。
- ColumnView.ActiveFilterEnabled --允许您打开或关闭当前过滤器。
- ColumnViewOptionsFilter.AllowMRUFilterList --允许您隐藏调用具有最近应用的筛选器的列表的按钮。
- ColumnViewOptionsFilter.AllowFilterEditor --控制“编辑过滤器”按钮的可见性。
增量搜索
用户可以聚焦网格列并开始键入。数据网格聚焦并突出显示第一个匹配记录。要查找其他记录,请按Ctrl+Up和Ctrl+Down热键。
过滤器编辑器
“过滤器编辑器”对话框允许用户从多个表达式组合构建复杂的过滤器条件。要调用此对话框,用户可以执行以下操作之一:
- 单击过滤器面板中的“Edit Filter”。
- 在常规下拉筛选菜单中选择“(Custom)”。
- 右键单击列标题,然后选择“Filter Editor”。
您可以修改ColumnViewOptionsFilter.DefaultFilterEditorView属性以启用过滤器编辑器的“文本”面板/选项卡,用户可以在其中手动键入过滤器表达式。
在v18.1及更高版本中,传统的“过滤器编辑器”将替换为具有高级“Text”面板的更新版本。此面板现在支持语法高亮显示和自动完成,以便于输入。若要将可识别数据的控件恢复到旧的筛选器编辑器版本,请禁用静态WindowsFormsSettings.UseAdvancedFilterEditorControl属性。
相关API:
- ColumnViewOptionsFilter.AllowFilterEditor --获取或设置筛选器编辑器是否可用。
- ColumnView.CustomFilterDialog ——当用户单击“自定义”过滤器下拉菜单项时,处理此事件以更改默认行为。请参阅以下主题以了解更多信息:高级筛选器和搜索概念。
- ColumnView.FilterEditorCreated --当筛选器编辑器即将显示时,此事件会激发。该事件允许您自定义编辑器对话框或阻止其显示。
- ColumnViewOptionsFilter.UseNewCustomFilterDialog --启用此属性,允许用户不仅根据常量自定义值,而且根据其他GridColumn的值筛选GridColumn值。
- ColumnViewOptionsFilter.FilterEditorAggregateEditing --此属性指定用户是否可以基于集合属性创建筛选器。
过滤条件显示样式
以下列表演示了控件中筛选条件的可用显示样式。
- Visual
以易读的格式呈现筛选条件,并使用基于皮肤的彩色高亮显示来区分列名、函数和值。在过滤器面板中,当您将鼠标悬停在条件上时,会显示“x”按钮。此按钮允许用户从过滤器中删除个别条件。
- Text -
基于文本的格式呈现筛选条件。
相关API:
- WindowsFormsSettings.FilterCriteriaDisplayStyle --获取或设置控件的“筛选器面板”、“MRU筛选器列表”和内置筛选器编辑器中筛选器条件的默认显示样式。
- ColumnViewOptionsView.FilterCriteriaDisplayStyle --获取或设置筛选器面板和内置筛选器编辑器中筛选器条件的显示样式。
“查找”面板
“查找面板”允许用户应用一个临时过滤器,该过滤器一次过滤所有数据网格列中的数据。要调用此面板,请在运行时按“Ctrl+F”。键入需要搜索的文本,然后按Enter键或单击“查找”。
请注意,“查找面板”不会用HTML文本突出显示单元格。
相关API:
- ColumnViewOptionsFind.AllowFindPanel --管理查找面板的可用性。
- ColumnViewOptionsFind.Behavior --获取或设置是否隐藏与查询不匹配的记录。
- ColumnViewOptionsFind.ParserKind ——如果输入到“查找”面板中的文本包含空白,则面板会将此字符串拆分为单独的逻辑块。ParserKind设置指定如何将这些块组合到搜索查询中。
- ColumnViewOptionsFind.Condition —获取或设置条件,数据网格根据该条件搜索在“查找面板”中输入的字符串。
- ColumnViewOptionsFind.FindMode --获取或设置用户必须按Enter键或单击“查找”按钮才能开始搜索,还是在一定延迟后自动开始搜索(ColumnViewOptionsFind.FindDelay属性)。
- ColumnViewOptionsFind.AllowFindInExpandedDetails --获取或设置是否在展开的详细信息视图中搜索数据。
在列标题中搜索
您可以使用 GridView.OptionsFilter.InHeaderSearchMode属性,以在视图的列标题中启用内置搜索框。搜索框用于筛选列数据或按列搜索,具体取决于您选择的模式。
- ‘TextFilter’ Mode
用户可以在搜索框中键入文本以根据列进行筛选。
- ‘TextSearch’ Mode
用户可以在搜索框中键入文本以搜索列数据。网格高亮显示与指定搜索字符串匹配的单元格文本。
使用以下快捷方式在搜索结果之间导航:
- Ctrl+向下箭头或F3–导航到下一个搜索结果。
- Ctrl+向上箭头或SHIFT+F3–定位到上一个搜索结果。
搜索语法
以下列表演示了列标题搜索框中支持的示例搜索表达式:
- Spa——查找列值包含此字符串的记录(在非数字列中)。
- 10——查找列值等于“10”(在数字列中)的记录。
- =Spain or =22 ——查找列值等于指定值的记录。
- <>40–查找列值不等于指定值的记录。其他支持的比较运算符包括:<、>、<=、>=和!=相当于
- =USA,Spain,Germany or =USA;Spain;Germany ——查找列值等于这些列出值中任意一个的记录。
- [10:20]或[10…20] ——查找列值属于指定的包含范围的记录。
相关API
- GridView.ClearInHeaderSearchText——清除所有列的搜索文本(列标题搜索框的内容)。
- GridView.HideInHeaderSearchTextBox ——隐藏当前活动的列标题搜索框。
- GridView.ShowInHeaderSearchTextBox ——为特定列激活内置的标头搜索框。
- GridColumn.SearchText——获取或设置列的内置标题搜索框的文本。此属性在网格视图和带边框网格视图中受支持。
- GridColumn.OptionsFilter.InHeaderSearchPrompt——获取或设置激活搜索框时显示在空标头搜索框中的灰色提示。
- GridView.OptionsFilter.ShowInHeaderSearchTextMode——获取或设置是否在列标题工具提示中显示搜索文本(GridColumn.SearchText)。