翻譯|使用教程|編輯:龔雪|2019-12-05 09:21:27.743|閱讀 475 次
概述:本教程主要為大家介紹如何使用DevExpress WPF控件為Search Panel使用自定義過濾器,v19.2全新發(fā)布,歡迎下載體驗!
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
DevExpress廣泛應用于ECM企業(yè)內容管理、 成本管控、進程監(jiān)督、生產調度,在企業(yè)/政務信息化管理中占據(jù)一席重要之地。通過DevExpress WPF Controls,您能創(chuàng)建有著強大互動功能的XAML基礎應用程序,這些應用程序專注于當代客戶的需求和構建未來新一代支持觸摸的解決方案。 無論是Office辦公軟件的衍伸產品,還是以數(shù)據(jù)為中心的商業(yè)智能產品,都能通過該控件來實現(xiàn)。
DevExpress WPF Controls v19.2下載
項目中實現(xiàn)了customRowFilter(下面提供的代碼),以便在用戶搜索網格時忽略重音和大小寫。目前存在的問題是,如果用戶使用filter editor應用于列表,然后使用綁定到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旨在覆蓋默認過濾的結果,因此需要考慮FilterString屬性值,或者使用其他事件。
建議考慮改用SearchStringToFilterCriteria事件,可以在其中指定如何將搜索字符串轉換為過濾條件。例如創(chuàng)建一個自定義函數(shù)標準運算符,該運算符將刪除變音符號并在SearchStringToFilterCriteria事件處理程序中使用它。
DevExpress中文網官網QQ群:540330292 歡迎一起進群討論
DevExpress 2019年度界面大賽火熱開啟!曬圖有獎,各大視頻VIP免費領??!
掃描下方二維碼,立即參與哦!

本站文章除注明轉載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@ke049m.cn
文章轉載自:慧都網