• <menu id="w2i4a"></menu>
  • logo DevExpress WPF使用技巧教程

    文檔首頁>>DevExpress WPF使用技巧教程>>DevExpress WPF使用教程:為Search Panel使用自定義過濾器

    DevExpress WPF使用教程:為Search Panel使用自定義過濾器


    DevExpress廣泛應(yīng)用于ECM企業(yè)內(nèi)容管理、 成本管控、進程監(jiān)督、生產(chǎn)調(diào)度,在企業(yè)/政務(wù)信息化管理中占據(jù)一席重要之地。通過DevExpress WPF Controls,您能創(chuàng)建有著強大互動功能的XAML基礎(chǔ)應(yīng)用程序,這些應(yīng)用程序?qū)W⒂诋?dāng)代客戶的需求和構(gòu)建未來新一代支持觸摸的解決方案。 無論是Office辦公軟件的衍伸產(chǎn)品,還是以數(shù)據(jù)為中心的商業(yè)智能產(chǎn)品,都能通過該控件來實現(xiàn)。

    DevExpress WPF Controls v19.2下載

    問題:

    項目中實現(xiàn)了customRowFilter(下面提供的代碼),以便在用戶搜索網(wǎng)格時忽略重音和大小寫。目前存在的問題是,如果用戶使用filter editor應(yīng)用于列表,然后使用綁定到TableView.SearchString的搜索框。如何在FilterString和SearchString之間使用AND,現(xiàn)在似乎是OR。如何在這兩個條件之間實現(xiàn)使用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,發(fā)現(xiàn)可以修改以下方法實現(xiàn)搜索和忽略重音。在不修改DevExpress代碼的情況下,有一種方法可以實現(xiàn)使用以下修改后代碼的earchStringToFilterCriteria自定義函數(shù)。

    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旨在覆蓋默認過濾的結(jié)果,因此需要考慮FilterString屬性值,或者使用其他事件。

    建議考慮改用SearchStringToFilterCriteria事件,可以在其中指定如何將搜索字符串轉(zhuǎn)換為過濾條件。例如創(chuàng)建一個自定義函數(shù)標(biāo)準(zhǔn)運算符,該運算符將刪除變音符號并在SearchStringToFilterCriteria事件處理程序中使用它。


    DevExpress v19.2全新發(fā)布,最新動態(tài)請持續(xù)關(guān)注DevExpress中文網(wǎng)!

    DevExpress中文網(wǎng)官網(wǎng)QQ群:540330292      歡迎一起進群討論

    DevExpress 2019年度界面大賽火熱開啟!曬圖有獎,各大視頻VIP免費領(lǐng)?。?/strong>

    掃描下方二維碼,立即參與哦!

    DevExpress中文網(wǎng)微信
    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();