DevExpress控件使用交流,DevExpress中国社区Dev联系电话 联系电话:023-68661681

DevExpress WPF中文教程:Data Grid - 如何绑定到有限制的自定义服务(五)?

来源:   发布时间:2026-01-22   浏览:27次

DevExpress WPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件的衍伸产品,还是以数据为中心的商业智能产品,都能通过DevExpress WPF控件来实现。

本文将演示如何将GridControl绑定到有限制的自定义服务(例如,不兼容的过滤器和排序),由于内容较多,我们将分为几篇文章来阐述,欢迎持续关注我们哟~

在上文中(点击这里回顾>>),我们为大家介绍了如何启用过搜索面板,本文将继续介绍如何考虑排序和过滤器限制,欢迎持续关注~

获取DevExpress WPF v25.2正式版下载

DevExpress技术交流群12:1028386091      欢迎一起进群讨论

Step 5:考虑排序和过滤器限制

如果您已成功完成上述步骤,那么网格控件的用户界面将允许最终用户执行数据管理操作。然而Issues Service存在特定的排序和筛选限制:

  • HotWeek只能通过标签进行筛选。
  • 在按Votes排序之后,您才能仅通过Votes进行筛选。

注意:在本教程中,使用Issues Service作为数据源的示例。

如果您发出的请求违反了上述限制规定,就会出现错误:

C#

static void CheckRestrictions(IssueSortOrder sortOrder, IssueFilter filter) {
if(filter == null)
return;
if((sortOrder == IssueSortOrder.Hot || sortOrder == IssueSortOrder.Week)
&& (filter.CreatedFrom != null || filter.CreatedTo != null || filter.MaxVotes != null || filter.MinVotes != null))
throw new InvalidOperationException("Restrictions violation");
if((filter.MaxVotes != null || filter.MinVotes != null)
&& !(sortOrder == IssueSortOrder.VotesAscending || sortOrder == IssueSortOrder.VotesDescending))
throw new InvalidOperationException("Restrictions violation");
}

以下图片展示了如果按照Votes这一筛选条件进行筛选,但所选筛选条件与Hot排序顺序不匹配时会出现的错误:

DevExpress WPF中文教程图集

若要避免出现此类错误消息,请让GridControl 控件忽略由数据服务所限制的操作,本文将详细介绍如何实现此操作。

考虑排序和筛选限制

1. 创建一个函数,用于实现服务的限制条件,并判断排序和筛选操作是否兼容:

C#

static bool IsValidFilter(string filterProperty, string sortProperty) {
if(filterProperty == "Tags")
return true;
if(sortProperty == "Hot" || sortProperty == "Week")
return false;
if(filterProperty == "Votes" && sortProperty != "Votes")
return false;
return true;
}

2. 处理DataControlBaseFilterGroupSortChanging事件,来丢弃与排序不兼容的过滤条件:

C#

void OnFilterGroupSortChanging(object sender, FilterGroupSortChangingEventArgs e) {
// ...
var sortProperty = e.SortInfo.SingleOrDefault()?.PropertyName;
var invalidFilters = e.SplitColumnFilters.Keys
.Where(key => !IsValidFilter(key, sortProperty))
.ToArray();
foreach(var invalidFilter in invalidFilters)
e.SplitColumnFilters.Remove(invalidFilter);
}

示例 1

如果您执行以下操作,则“按投票数筛选”的功能将被取消:

  1. 按票数排序
  2. 按票数筛选
  3. 按创建时间排序
DevExpress WPF中文教程图集

这个实力表明,更改排序模式会清除不兼容的筛选条件。

示例 2

如果您执行以下操作,则“按投票数筛选”的功能将被取消:

  1. 按创建时间排序
  2. 按投票数筛选
DevExpress WPF中文教程图集

在本示例中,通过“投票数”进行筛选并无意义(Issues Service只有在按照“投票数”进行排序后才能进行筛选操作),请按照下一步操作来禁止此类操作。

禁止终端用户使用违反Issues Service限制的过滤器:

XAML

<dxg:GridColumn FieldName="Created" AllowColumnFiltering="{DXBinding '$dxu:DefaultBooleanExtension.ToDefaultBoolean(!@e(hotColumn).IsSorted and !@e(weekColumn).IsSorted)'}" />
<dxg:GridColumn FieldName="Votes" AllowColumnFiltering="{DXBinding '$dxu:DefaultBooleanExtension.ToDefaultBoolean(@Self.IsSorted)'}" />

下面的图片展示了结果:

DevExpress WPF中文教程图集

更多产品资讯及授权,欢迎来电咨询:023-68661681


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

关于慧都科技

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

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

本站文章除注明转载外,均为本站原创或翻译
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果
转载请注明:文章转载自:DevExpress控件中文网 [https://www.devexpresscn.com/]
本文地址:https://www.devexpresscn.com/post/5643.html

相关产品: DevExpress WPF Subscription, DevExpress Universal Subscription,

扫码咨询
电话咨询
023-68661681
返回
顶部