DevExpress WinForms拥有180+组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!
本教程提供了有关DevExpress WinForms Grid的API信息,该API运行您过滤数据并定位行。在本文中您将了解如何将过滤条件应用于整个视图或单个列,如何清除现有过滤条件,以及如何按单元格值定位行或显示文本。
获取DevExpress WinForms v25.1正式版下载
DevExpress技术交流群11:749942875 欢迎一起进群讨论
过滤行API
DevExpress WinForms Grid的API允许您对视图或单个列应用过滤条件,本教程将通过把Click处理程序分配给View Filtering(视图过滤)和Column Filtering(列过滤)组中的按钮来展示这两种方法。
将过滤器应用于视图
首先,处理View Filtering组中Apply Filter按钮的Click事件。在事件处理程序中,将过滤器表达式分配给视图的ColumnView.ActiveFilterString属性。
过滤器表达式包含由OR和AND逻辑运算符组合的三个子句,第一和第二子句用括号分组,过滤条件使用各种比较运算符,例如大于或不等于。日期-时间常量必须用“#”字符封装,而字符串常量必须用单引号括起来。
C#
private void btn_ApplyViewFilter_ItemClick(object sender, ItemClickEventArgs e) { gridView.ActiveFilterString = "([UnitPrice] < 20 OR [OrderDate] >= #06/1/2015#) AND [ProductName] <> 'Chang'"; }
现在为Clear Filter按钮编写事件处理程序。要清除视图及其所有列的过滤器设置,请调用视图ColumnView.ActiveFilter属性的clear方法。
C#
private void btn_ClearViewFilter_ItemClick(object sender, ItemClickEventArgs e) { gridView.ActiveFilter.Clear(); }
运行应用程序来查看结果,点击Apply Filter按钮,选择单价小于20或订单日期大于6月1日且产品名称不是“chang”的记录。网格将显示过滤器表达式中涉及的列的过滤器按钮,但是这些列中的过滤器下拉列表不包含可清除过滤器的项。

单击Clear Filter按钮来删除整个视图中得过滤器设置。
将过滤器应用于列
关闭应用程序并切换到 Column Filtering组,处理Apply Filter按钮的Click事件,来选择单价大于20且小于30的记录。为此,使用所需的过滤条件创建一个新的ColumnFilterInfo对象,并将其分配给Unit Price列的GridColumn.FilterInfo属性。
C#
private void btn_ApplyColumnFilter_ItemClick(object sender, ItemClickEventArgs e) { string filterString = "[UnitPrice] > 20 AND [UnitPrice] < 30"; gridView.Columns["UnitPrice"].FilterInfo = new ColumnFilterInfo(filterString); }
在ClearFilter按钮的Click事件处理程序中,调用目标列的GridColumn.ClearFilter方法。
C#
private void btn_ClearColumnFilter_ItemClick(object sender, ItemClickEventArgs e) { gridView.Columns["UnitPrice"].ClearFilter(); }
运行应用程序并单击Column Filtering组中的Apply Filter按钮,来根据Unit Price列过滤数据。现在,目标列的下拉列表包含清除列过滤器的(All)项。

通过单击相应的Clear filter按钮,删除应用于该列的过滤器。
要更改过滤器面板中显示的文本,请向ColumnFilterInfo对象构造函数添加一个参数。
C#
private void btn_ApplyColumnFilter_ItemClick(object sender, ItemClickEventArgs e) { string filterString = "[UnitPrice] > 20 AND [UnitPrice] < 30"; string displayText = "[UnitPrice] Is between $20.00 and $30.00"; gridView.Columns["UnitPrice"].FilterInfo = new ColumnFilterInfo(filterString, displayText); }
再次运行应用程序来查看结果,当您单击Column Filtering组中的Apply Filter按钮时,网格将根据Unit Price列筛选数据,并在过滤器面板中显示指定的文本。

定位行API
返回到设计时,为Locate Row按钮编写代码。
按单元格值定位行
用三个参数调用View的ColumnView.LocateByValue方法:第一个参数指定搜索开始的行句柄;第二个命令将搜索范围缩小到特定列,第三个命令指定搜索值。Category列使用ImageComboBoxEdit就地编辑器,它将底层整数值表示为带有图像的字符串。值1对应于“饮料”类别,找到行后,通过设置视图的ColumnView.FocusedRowHandle属性将焦点移动到该行。
C#
private void btn_LocateRow_ItemClick(object sender, ItemClickEventArgs e) { int rowHandle = gridView.LocateByValue(gridView.FocusedRowHandle + 1, gridView.Columns["Category"], 1); gridView.FocusedRowHandle = rowHandle; }
运行应用程序并单击Locate Row按钮,因此网格将关注Category列中最近的包含“Beverages”的行,随后的单击遍历带有“Beverages”类别的所有行。
通过显示文本定位行
关闭应用程序并修改处理程序代码,以便通过显示文本定位行。要做到这一点,使用ColumnView.LocateByDisplayText方法并传递“Beverages”字符串作为第三个参数。
C#
private void btn_LocateRow_ItemClick(object sender, ItemClickEventArgs e) { int rowHandle = gridView.LocateByDisplayText(gridView.FocusedRowHandle + 1, gridView.Columns["Category"], "Beverages"); gridView.FocusedRowHandle = rowHandle; }
再次运行应用程序并单击Locate Row按钮来查看结果。
更多DevExpress线上公开课、中文教程资讯请上中文网获取
关于慧都科技
慧都是⼀家⾏业数字化解决⽅案公司,专注于软件、⽯油与⼯业领域,以深⼊的业务理解和⾏业经验,帮助企业实现智能化转型与持续竞争优势。
慧都科技是DevExpress的中国区的合作伙伴,DevExpress作为用户界面领域的优秀产品,帮助企业高效构建权限管理、数据可视化(如网格/图表/仪表盘)、跨平台系统(WinForms/ASP.NET/.NET MAUI)及行业定制解决方案,加速开发并强化交互体验。
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果
转载请注明:文章转载自:DevExpress控件中文网 [https://www.devexpresscn.com/]
本文地址:https://www.devexpresscn.com/post/5448.html
相关产品: DevExpress WinForms Subscription, DevExpress Universal Subscription,