DevExpress WinForms中文教程:过滤器和搜索 - 列过滤器下拉列表

翻译|使用教程|编辑:龚雪|2025-08-12 11:23:03.797|阅读 12 次

概述:本教程主要为大家介绍DevExpress WinForms数据网格控件中的列过滤器功能,欢迎下载最新版组件体验!

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

相关链接:

DevExpress WinForms拥有180+组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!

本教程将向您展示Microsoft Excel和Microsoft Windows Explorer启发的数据过滤功能,这些功能可在DevExpress WinForms网格中使用,包括:

  • 过滤器下拉列表
  • 自定义过滤器对话框
  • 最近使用的过滤器值
  • 过滤器下拉日期时间值
  • 在过滤器下拉框中勾选列表

您将了解默认情况下可用的内容以及如何禁用或自定义这些UI元素。

获取DevExpress WinForms v25.1正式版下载

DevExpress技术交流群11:749942875      欢迎一起进群讨论

默认操作

使用悬停列标题时出现的按钮,可以使用Excel样式的过滤器下拉菜单。对于除日期-时间外的所有列类型,过滤器下拉列表显示一个简单的列表,您可以在其中一次选择一个项目。

DevExpress WinForms中文使用教程图集

当您选择一个项目时,网格会自动关闭下拉菜单,并过滤网格的数据,以便在相应的列中显示具有所选值的记录。

DevExpress WinForms中文使用教程图集

下拉列表还提供(Custom)项,它调用Custom Filter Editor。与Microsoft Excel非常相似,此对话框允许最终用户指定最多两个过滤条件,显示谁是Mike Roller或Carl Lucas的记录。

DevExpress WinForms中文使用教程图集

您可以过滤网格对多个列的数据,如果单击另一列的筛选器按钮,则只会看到符合先前应用筛选标准的记录中的值。如果需要查看从所有记录中获取的值,请在按住SHIFT键的同时单击过滤器按钮。如果将筛选条件应用于某列,则该列的筛选器下拉列表将显示所有值。

DevExpress WinForms中文使用教程图集

若要清除特定列的过滤,请单击对应下拉列表中的(All)项。

DevExpress WinForms中文使用教程图集

之后,您可以再次单击列的筛选器按钮,来在列表顶部查找最近使用的项目,它们与其他项目之间用双线隔开。

DevExpress WinForms中文使用教程图集

现在关闭应用程序并展开视图的ColumnView.OptionsFilter属性,要禁用最近使用的筛选器项显示,请关闭ColumnViewOptionsFilter.AllowColumnMRUFilterList选项,通过设置ColumnViewOptionsFilter.ColumnFilterPopupMaxRecordsCount属性为10来改变下拉高度。

DevExpress WinForms中文使用教程图集

运行应用程序。现在列标题下拉菜单显示10个或更少的项目,如果需要,还会显示一个垂直滚动条,过滤器下拉列表不再显示最近使用的项目。

日历过滤器下拉列表

单击日期-时间列中的过滤器按钮,您会看到一个下拉菜单,里面有一个嵌入式日历。选择所需的日期或间隔后,网格立即过滤其数据。

DevExpress WinForms中文使用教程图集

您还可以使用日历下面的复选框来选择常见的日期间隔,例如“本月早些时候”、“今年早些时候”等。要清除当前过滤器,请选中Show all复选框,要隐藏下拉菜单,请单击关闭按钮。

检查过滤器下拉列表

您也可以使用下拉列表,就像新版的Microsoft Excel或Windows File Explorer一样。要启用此模式,请选择一个列,展开其GridColumn.OptionsFilter属性并将OptionsColumnFilter.FilterPopupMode选项设置为FilterPopupMode.CheckedList

DevExpress WinForms中文使用教程图集

运行应用程序并单击列的过滤器按钮,现在您可以同时选择多个项目,选择三个值,单击OK。

DevExpress WinForms中文使用教程图集

网格现在显示具有下拉列表中所选值的记录。

DevExpress WinForms中文使用教程图集

要清除针对该列的过滤,请调用下拉菜单,单击Select All,然后单击OK。

过滤空和Null值

过滤器下拉菜单提供特殊项来处理空值或null值,如果在下拉列表中选择(Blanks)项,则网格将显示值为空的记录。

DevExpress WinForms中文使用教程图集

以同样的方式,您可以选择(Non Blanks)来过滤掉这些空值。类似地,选中的下拉列表提供(Blanks)项。

DevExpress WinForms中文使用教程图集

默认情况下,日期-时间列的下拉列表不包含此类项。

关闭应用程序。要从下拉菜单中隐藏(blank)和(Non Blanks)项,将OptionsColumnFilter.ShowBlanksFilterItems属性设置为False。选择固定日期列,并将其OptionsColumnFilter.ShowEmptyDateFilter选项设置为True,这将在日期时间过滤器下拉列表中添加一个空值复选框。

DevExpress WinForms中文使用教程图集

运行应用程序来查看结果。调用Priority列下拉列表,查看它是否包含(Blanks)和(Non Blanks)项。然后单击Fixed Date列标题中的过滤器按钮,现在这个列下拉菜单显示额外的Show Empty复选框。

DevExpress WinForms中文使用教程图集
自定义过滤器下拉列表

网格还允许您手动自定义过滤器下拉列表。

  • 自定义常规下拉列表

您可以添加新的或删除现有的项目,切换到设计时,看看如何做到这一点。

常规下拉列表可以使用View的ColumnView.ShowFilterPopupListBox事件自定义,该事件会在过滤器下拉列表显示之前触发。为这个事件编写一个处理程序,将一个新的自定义项添加到Priority列的下拉列表中,事件的Column参数指定下拉列表中将要显示的列。首先,找到第一个值项的索引,在它之前插入一个自定义项。要做到这一点,使用事件的FilterPopupListBoxEventArgs.ComboBox参数的RepositoryItemComboBox.Items属性,遍历当前下拉框显示的项目。若要跳过分隔MRU项和预定义项的双线,请检查当前项是否由FilterItem对象表示。然后使用当前项的Value属性。如果是FilterItemColumnFilterInfo类型,则当前项不是值项。一旦检测到值项,就应该停止搜索过程。

之后,创建一个过滤器标准来选择具有High和Medium优先级的记录,指定所需的筛选条件和要在过滤器面板中显示的文本,并用这些设置创建一个新的ColumnFilterInfo对象。将标题为“Important”的过滤选项插入到过滤器下拉框中的指定位置。

C#

private void gridView_ShowFilterPopupListBox(object sender, FilterPopupListBoxEventArgs e) {
if (e.Column.FieldName != "Priority") return;
// Get the index of the first value item.
int index;
for (index = 0; index < e.ComboBox.Items.Count; index++) {
object item = e.ComboBox.Items[index];
if (item is FilterItem) {
object itemValue = ((FilterItem)item).Value;
if (itemValue is FilterItem || itemValue is ColumnFilterInfo) continue;
break;
}
}
// Create a filter criterion to select records with the "High" and "Medium" priorities.
string filterString = "([Priority] == 3 OR [Priority] == 2)";
string filterDisplayText = "[Priority] == High OR [Priority] == Medium";
ColumnFilterInfo filterInfo = new ColumnFilterInfo(filterString, filterDisplayText);
e.ComboBox.Items.Insert(index, new FilterItem("Important", filterInfo));
}

运行应用程序来查看结果,单击优先级列的筛选器按钮,来在下拉列表中找到显示的重要项。选择此项时,网格显示优先级设置为High或Medium的记录。

DevExpress WinForms中文使用教程图集
  • 自定义选中的下拉列表

现在关闭应用程序并自定义Name列中的选中的下拉列表,选择View并处理它的ColumnView.ShowFilterPopupCheckedListBox事件,事件的Column参数标识将要显示的下拉列表的列,FilterPopupCheckedListBoxEventArgs.CheckedComboBox参数提供下拉列表的项集合。事件处理程序禁用以‘ Data ’开头的项,并删除以‘ Help ’开头的项。

C#

private void gridView_ShowFilterPopupCheckedListBox(object sender, FilterPopupCheckedListBoxEventArgs e) {
if (e.Column.FieldName != "Name") return;
for (int i = 0; i < e.CheckedComboBox.Items.Count; i++) {
CheckedListBoxItem item = e.CheckedComboBox.Items[i];
string itemValue = (string)(item.Value as FilterItem).Value;
// Disable checked items that start with "Data".
if (itemValue.StartsWith("Data"))
e.CheckedComboBox.Items[i].Enabled = false;
// Remove checked items that start with "Help".
if (itemValue.StartsWith("Help")) {
e.CheckedComboBox.Items.Remove(item);
i--;
}
}
}

再次运行应用程序并单击Name列中的过滤器按钮,出现的选中的下拉列表不包含以“Help”开头的项,并且有三个文本以“Data”开头的禁用项。

DevExpress WinForms中文使用教程图集

更多DevExpress线上公开课、中文教程资讯请上中文网获取

关于慧都科技

慧都是⼀家⾏业数字化解决⽅案公司,专注于软件、⽯油与⼯业领域,以深⼊的业务理解和⾏业经验,帮助企业实现智能化转型与持续竞争优势。

慧都科技是DevExpress的中国区的合作伙伴,DevExpress作为用户界面领域的优秀产品,帮助企业高效构建权限管理、数据可视化(如网格/图表/仪表盘)、跨平台系统(WinForms/ASP.NET/.NET MAUI)及行业定制解决方案,加速开发并强化交互体验。


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:慧都网

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP