如何定义搜索面板的过滤器?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 欢迎一起进群讨论
如何定义搜索面板的过滤器?DevExpress WPF超easy的更多相关文章
- DevExpress WPF v18.2新版亮点(二)
买 DevExpress Universal Subscription 免费赠 万元汉化资源包1套! 限量15套!先到先得,送完即止!立即抢购>> 行业领先的.NET界面控件2018年第 ...
- DevExpress WPF v19.1新版亮点:PDF Viewer等控件新功能
行业领先的.NET界面控件DevExpress 日前正式发布v19.1版本,本站将以连载的形式介绍各版本新增内容.在本系列文章中将为大家介绍DevExpress WPF v19.1中新增的一些控件及部 ...
- DevExpress WPF v19.1:Data Grid/Tree List等控件功能增强
行业领先的.NET界面控件DevExpress 日前正式发布v19.1版本,本站将以连载的形式介绍各版本新增内容.在本系列文章中将为大家介绍DevExpress WPF v19.1中新增的一些控件及部 ...
- Smart Tag——DevExpress WPF初探
Smart Tag是一个设计时扩展,所有标准控件均自带这个功能,当然也包括 DevExpress WPF Controls .可以快速设置控件的值或者绑定最重要的属性.它还可以帮助你完成一些重复的工作 ...
- DevExpress WPF v18.2新版亮点(六)
买 DevExpress Universal Subscription 免费赠 万元汉化资源包1套! 限量15套!先到先得,送完即止!立即抢购>> 行业领先的.NET界面控件2018年第 ...
- DevExpress WPF v18.2新版亮点(三)
买 DevExpress Universal Subscription 免费赠 万元汉化资源包1套! 限量15套!先到先得,送完即止!立即抢购>> 行业领先的.NET界面控件2018年第 ...
- 甘特图、Data Editors控件新玩法—DevExpress WPF v19.2
通过DevExpress WPF Controls,你能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案. 无论是Office办公软件的衍 ...
- DevExpress WPF v18.2新版亮点(七)
行业领先的.NET界面控件2018年第二次重大更新——DevExpress v18.2日前正式发布,本站将以连载的形式为大家介绍新版本新功能.本文将介绍了DevExpress WPF v18.2的新功 ...
- DevExpress WPF v18.2新版亮点(四)
行业领先的.NET界面控件2018年第二次重大更新——DevExpress v18.2日前正式发布,本站将以连载的形式为大家介绍新版本新功能.本文将介绍了DevExpress WPF v18.2的新功 ...
随机推荐
- du 和 df命令
测试环境数据库收到磁盘报警时,需要清理部分磁盘空间 df -h 查看整个磁盘占有 找到对应目录 查看每个文件夹占有磁盘量: sudo du -h --max-depth=1 data/ --max-d ...
- 34.TCP非阻塞连接及套接字异常处理丶端口扫描脚本
TCP非阻塞及套接字异常处理: TCP阻塞套接字异常捕获: 套接字创建失败,8000 socket.error 客户端连接错误: ConnectionRefusedError socket.gaier ...
- golang写入csv
package main import ( "encoding/csv" "fmt" "os" ) func main() { file, ...
- C#中异步编程异常的处理方式
异步编程异常处理 在同步编程中,一旦出现错误就会抛出异常,我们可以使用try-catch来捕捉异常,未被捕获的异常则会不断向上传递,形成一个简单而统一的错误处理机制.但是对于异步编程来说,异常处理一直 ...
- Java集合框架——Map接口
第三阶段 JAVA常见对象的学习 集合框架--Map集合 在实际需求中,我们常常会遇到这样的问题,在诸多的数据中,通过其编号来寻找某一些信息,从而进行查看或者修改,例如通过学号查询学生信息.今天我们所 ...
- Django使用DataTables插件总结
Django使用Datatables插件总结 文章中的例子已上传至github 基本使用 Datatables插件是一款方便简单的展示数据的列表插件.关于基本使用,官方网站上的已介绍的很详细,这里我再 ...
- Jquery中数组转字符串,c:foreach自动将带","字符串进行拆分赋值
1.数组转字符串,逗号分割 a.push()将元素依次添加至数组: b.join()将数组转换成字符串,里面可以带参数分隔符,默认[,] <script type = text/javascri ...
- 对称加密、非对称加密、数字签名、数字证书、SSL是什么
非对称密钥加解密 对于一份数据,通过一种算法,基于传入的密钥(一串由数字或字符组成的字符串,也称key),将明文数据转换成了不可阅读的密文,这就是“加密”,同样的,密文到达目的地后,需要再以相应的算法 ...
- (十八)JDBC获取存储过程和主键
目录 获取数据库自动生成的主键: JDBC调用存储过程 获取数据库自动生成的主键: update 更新操作以后,如果需要用到结果集,可以通过 PreparedStatement.getResultSe ...
- LeetCode. 矩阵中的最长递增路径
题目要求: 给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕). 示例: 输入: nums = [ ...