DevExpress广泛应用于ECM企业内容管理、 成本管控、进程监督、生产调度,在企业/政务信息化管理中占据一席重要之地。通过DevExpress WPF Controls,您能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件的衍伸产品,还是以数据为中心的商业智能产品,都能通过该控件来实现。

DevExpress WPF Controls v19.2下载

问题:

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

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 bool? 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      欢迎一起进群讨论

最新文章

  1. NodeJs入门学习(一)
  2. 由于C++编译器的分析机制所导致的声明问题
  3. CSS :hover伪类选择定义和用法
  4. 如何添加win10命令提示符字体,美化显示效果
  5. 2.0.4 CCLabelTTF在ios7下不显示的问题
  6. JavaScript 文件上传类型判断
  7. except ShortInputException,x中逗号
  8. rm反向删除的几种方法
  9. 查看SQL语句执行时间
  10. Unity 2DSprite
  11. java泛型问题 关于警告:XX is a raw type
  12. Java基础06 组合
  13. Django之路:QuerySet API,后台和表单
  14. C语言程序设计课程设计自查表格
  15. lodash源码分析之List缓存
  16. (详细)华为畅享7 SLA-AL00的usb调试模式在哪里打开的流程
  17. mui 浏览器一样自动缩放
  18. Spring Boot 2.0尝鲜-动态 Banner
  19. PostgreSQL源码安装文档
  20. 完全图解RNN、RNN变体、Seq2Seq、Attention机制

热门文章

  1. HDU 6470 【矩阵快速幂】
  2. 日常工作问题解决:记一次centos7上的lvm表错误解决过程
  3. Hadoop之HDFS介绍
  4. 什么是DataV数据可视化
  5. Redis3.2学习记录
  6. js唤醒手机APP
  7. spring入门一:框架整体简介
  8. 报错Could not find resource cn/smbms/dao/provider/ProviderMapper.xml
  9. Java各版本新特性总结
  10. 【剑指OFFER】链表中倒数第k个结点