我想扩展Telerik RadGrid的过滤行为 . 例如,如果用户使用以下单词"michele"过滤网格,则还应返回包含"michèle"的行 . Telerik RadGrid中不支持开箱即用 . 因此我为String类型编写了一个扩展方法: public static bool IsSqlLikeMatch( this string input, string pattern ) { [...] }
作为第二步,我替换了RadGrid的FilterExpression,如下所示:
this.MasterTableView.FilterExpression.Replace( "Contains", "IsSqlLikeMatch" );
但不幸的是我收到以下错误消息:
没有适用的方法'IsSqlLikeMatch'存在于'String'类型中
Telerik RadGrid使用DynamicLinq . 所以我的问题是:“我可以在DynamicLinq中使用扩展方法吗?”我该如何做到这一点?
Edit 09/09/2011: 我联系了Telerik的支持,这是他们的回答:
遗憾的是,您无法扩展Telerik.Web.UI.dll中包含的动态linq函数 . 因此,对DynamicLinq类的更改不会影响RadControls内部使用的ExpressionParser . 但是,您可以尝试更改Dynamic Linq库并通过从RadGrid解析获取过滤器表达式并将它们传递给更改的Dynamic Linq类的方法并将RadGrid绑定到返回的数据来执行自定义过滤 . 我附上了一个小样本,演示了如何使用RadGrid的过滤器/排序表达式来过滤,排序和翻阅ObjectDataSource .
1 回答
要使用扩展方法,必须为您定义扩展方法的类的命名空间使用
using
指令 .因此,尝试将您的类放在命名空间中,并为其添加
using
.另外,请确保将此类定义为public static .