如何定義搜索面板的過濾器?DevExpress WPF超easy

DevExpress普遍應用於ECM企業內容管理、 成本管控、進程監督、生產調度,在企業/政務信息化管理中佔據一席重要之地。經過DevExpress WPF Controls,您能建立有着強大互動功能的XAML基礎應用程序,這些應用程序專一於當代客戶的需求和構建將來新一代支持觸摸的解決方案。 不管是Office辦公軟件的衍伸產品,仍是以數據爲中心的商業智能產品,都能經過該控件來實現。express

DevExpress WPF Controls v19.2下載函數

問題:code

項目中實現了customRowFilter(下面提供的代碼),以便在用戶搜索網格時忽略重音和大小寫。目前存在的問題是,若是用戶使用filter editor應用於列表,而後使用綁定到TableView.SearchString的搜索框。如何在FilterString和SearchString之間使用AND,如今彷佛是OR。如何在這兩個條件之間實現使用AND而不是OR?orm

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; 
}ip

解決方案:ci

CustomRowFilter旨在覆蓋默認過濾的結果,所以須要考慮FilterString屬性值,或者使用其餘事件。字符串

建議考慮改用SearchStringToFilterCriteria事件,能夠在其中指定如何將搜索字符串轉換爲過濾條件。例如建立一個自定義函數標準運算符,該運算符將刪除變音符號並在SearchStringToFilterCriteria事件處理程序中使用它。get


DevExpress v19.2全新發布,最新動態請持續關注DevExpress中文網!

DevExpress中文網官網QQ羣:540330292      歡迎一塊兒進羣討論

相關文章
相關標籤/搜索