【发布时间】:2011-10-02 22:06:08
【问题描述】:
我想扩展 Telerik RadGrid 的过滤器行为。
例如,如果用户使用以下单词“michèle”过滤网格,它还应该返回包含“michèle”的行。 Telerik RadGrid 不支持开箱即用。
因此我为String类型写了一个扩展方法:public static bool IsSqlLikeMatch( this string input, string pattern ) { [...] }
作为第二步,我像这样替换了 RadGrid 的 FilterExpression:
this.MasterTableView.FilterExpression.Replace( "Contains", "IsSqlLikeMatch" );
但不幸的是,我收到以下错误消息:
“String”类型中不存在适用的方法“IsSqlLikeMatch”
Telerik RadGrid 使用 DynamicLinq。因此,我的问题是:“我可以在 DynamicLinq 中使用扩展方法吗”?我该如何做到这一点?
编辑 09/09/2011: 我已经联系了 Telerik 支持,这是他们的回答:
很遗憾,您无法扩展 Telerik.Web.UI.dll 中包含的动态 linq 函数。因此,您对 DynamicLinq 类的更改不会影响 RadControls 内部使用的 ExpressionParser。但是,您可以尝试更改 Dynamic Linq 库并通过从 RadGrid 解析中获取过滤器表达式来执行自定义过滤,并将它们传递给更改后的 Dynamic Linq 类的方法并将 RadGrid 绑定到返回的数据。我附上了一个小示例,演示了如何使用 RadGrid 的过滤/排序表达式对 ObjectDataSource 进行过滤、排序和分页。
【问题讨论】:
-
方法
IsSqlLikeMatch在什么命名空间? -
它写了一个包含我所有扩展方法的类,但我没有为这个类指定命名空间。
-
您可能想尝试将其放在
System.Linq命名空间中 - 我不确定我是否建议将其作为长期解决方案,但是看看该方法是否会很有趣找到了。 -
@Kragen 好主意!但不幸的是它不起作用......
-
我找到了这篇文章 (blog.walteralmeida.com/2010/05/…)...也许这是要走的路。我试试看。