DevExpress WPF使用教程:为Search Panel使用自定义过滤器

本教程主要为大家介绍如何使用DevExpress WPF控件为Search Panel使用自定义过滤器,v19.2全新发布,欢迎下载体验!

问题:

项目中实现了customRowFilter(下面提供的代码),以便在用户搜索网格时忽略重音和大小写。目前存在的问题是,如果用户使用filter editor应用于列表,然后使用绑定到TableView.SearchString的搜索框。如何在FilterString和SearchString之间使用AND,现在似乎是OR。如何在这两个条件之间实现使用AND而不是OR/p>

private List<GridColumn> _searchableColumns;   private void OnCustomRowFilter(object sender, RowFilterEventArgs e)   { if (string.IsNullOrEmpty(View.SearchString) || e.Handled) return; if (_searchableColumns == null) { _searchableColumns = new List<GridColumn>(); foreach (var c in Columns) { if (c.FieldType == typeof(bool) || !c.AllowAutoFilter) continue; _searchableColumns.Add(c); } } var filter = RemoveDiacriticsCustom(View.SearchString).ToLower(); e.Visible = false; for (var i = 0; i < _searchableColumns.Count; i++) { var processedString = RemoveDiacriticsCustom(GetCellDisplayTextByListIndex(e.ListSourceRowIndex, _searchableColumns[i])).ToLower(); if (processedString.Contains(filter)) { e.Visible = true; break; } } e.Handled = true; } private static string RemoveDiacriticsCustom(string text) { return string.Concat(text.Normalize(NormalizationForm.FormD).Where(ch => CharUnicodeInfo.GetUnicodeCategory(ch) != UnicodeCategory.NonSpacingMark)).Normalize(NormalizationForm.FormC); }

分析了DevExpress Searching/Filtering pipeline,发现可以修改以下方法实现搜索和忽略重音。在不修改DevExpress代码的情况下,有一种方法可以实现使用以下修改后代码的earchStringToFilterCriteria自定义函数。

static boolnbsp;FnContainsCaseInsensitive(string str1, string str2)   { if(str1 == null || str2 == null) return null; //return //str1.IndexOf(str2, StringComparison.InvariantCultureIgnoreCase) >= 0 || //str1.IndexOfInvariantCultureIgnoreCase(str2) >= 0; var compareInfo = CultureInfo.InvariantCulture.CompareInfo; return compareInfo.IndexOf(str1, str2, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace) > -1; }
解决方案:

CustomRowFilter旨在覆盖默认过滤的结果,因此需要考虑FilterString属性值,或者使用其他事件。

建议考虑改用SearchStringToFilterCriteria事件,可以在其中指定如何将搜索字符串转换为过滤条件。例如创建一个自定义函数标准运算符,该运算符将删除变音符号并在SearchStringToFilterCriteria事件处理程序中使用它。


DevExpress v19.2全新发布,最新动态请持续关注DevExpress中文网!

DevExpress中文网官网QQ群:540330292      欢迎一起进群讨论

DevExpress 2019年度界面大赛火热开启!晒图有奖,各大视频VIP免费领取!

扫描下方二维码,立即参与哦!

DevExpress中文网微信
标签:

来源:慧都

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年11月2日
下一篇 2019年11月3日

相关推荐

发表回复

登录后才能评论