• 如何定义搜索面板的过滤器?DevExpress WPF超easy


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

  • 相关阅读:
    jdk1.8 LongAdder源码学习
    linux 下 vi 文本编辑如何复制一行粘贴删除一行数据
    远程调试
    本机与远程主机指定端口的网络是否连通
    自定义弹窗
    Windows查看占用端口的进程及其对应的应用程序并关闭之
    超实惠:99元阿里云服务器1核2G内存40G硬盘(SSD)
    Java显式锁学习总结之六:Condition源码分析
    Maven使用国内镜像
    深入理解读写锁—ReadWriteLock源码分析
  • 原文地址:https://www.cnblogs.com/AABBbaby/p/11994288.html
Copyright © 2020-2023  润新知