翻譯|使用教程|編輯:龔雪|2019-12-05 09:21:27.743|閱讀 457 次
概述:本教程主要為大家介紹如何使用DevExpress WPF控件為Search Panel使用自定義過(guò)濾器,v19.2全新發(fā)布,歡迎下載體驗(yàn)!
# 界面/圖表報(bào)表/文檔/IDE等千款熱門(mén)軟控件火熱銷(xiāo)售中 >>
相關(guān)鏈接:
DevExpress廣泛應(yīng)用于ECM企業(yè)內(nèi)容管理、 成本管控、進(jìn)程監(jiān)督、生產(chǎn)調(diào)度,在企業(yè)/政務(wù)信息化管理中占據(jù)一席重要之地。通過(guò)DevExpress WPF Controls,您能創(chuàng)建有著強(qiáng)大互動(dòng)功能的XAML基礎(chǔ)應(yīng)用程序,這些應(yīng)用程序?qū)W⒂诋?dāng)代客戶(hù)的需求和構(gòu)建未來(lái)新一代支持觸摸的解決方案。 無(wú)論是Office辦公軟件的衍伸產(chǎn)品,還是以數(shù)據(jù)為中心的商業(yè)智能產(chǎn)品,都能通過(guò)該控件來(lái)實(shí)現(xiàn)。
DevExpress WPF Controls v19.2下載
項(xiàng)目中實(shí)現(xiàn)了customRowFilter(下面提供的代碼),以便在用戶(hù)搜索網(wǎng)格時(shí)忽略重音和大小寫(xiě)。目前存在的問(wèn)題是,如果用戶(hù)使用filter editor應(yīng)用于列表,然后使用綁定到TableView.SearchString的搜索框。如何在FilterString和SearchString之間使用AND,現(xiàn)在似乎是OR。如何在這兩個(gè)條件之間實(shí)現(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)可以修改以下方法實(shí)現(xiàn)搜索和忽略重音。在不修改DevExpress代碼的情況下,有一種方法可以實(shí)現(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旨在覆蓋默認(rèn)過(guò)濾的結(jié)果,因此需要考慮FilterString屬性值,或者使用其他事件。
建議考慮改用SearchStringToFilterCriteria事件,可以在其中指定如何將搜索字符串轉(zhuǎn)換為過(guò)濾條件。例如創(chuàng)建一個(gè)自定義函數(shù)標(biāo)準(zhǔn)運(yùn)算符,該運(yùn)算符將刪除變音符號(hào)并在SearchStringToFilterCriteria事件處理程序中使用它。
DevExpress中文網(wǎng)官網(wǎng)QQ群:540330292 歡迎一起進(jìn)群討論
DevExpress 2019年度界面大賽火熱開(kāi)啟!曬圖有獎(jiǎng),各大視頻VIP免費(fèi)領(lǐng)取!
掃描下方二維碼,立即參與哦!
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:慧都網(wǎng)