2011-07-11 9 views
4

我想擴展Telerik RadGrid的過濾器行爲。 如果用戶例如用下面的單詞「michele」過濾網格,它也應該返回包含「michèle」的行。 Telerik RadGrid不支持這種開箱即用的功能。 因此,我寫的String類型一個擴展方法:public static bool IsSqlLikeMatch(this string input, string pattern) { [...] }在DynamicLinq查詢中使用擴展方法

作爲第二步驟我取代radgrid控件的這樣的FilterExpression:

this.MasterTableView.FilterExpression.Replace("Contains", "IsSqlLikeMatch"); 

但不幸的是我得到以下錯誤消息:

沒有適用的方法 'IsSqlLikeMatch' 存在於類型 '字符串'

Telerik RadGrid使用DynamicLinq。所以我的問題是:「我可以在DynamicLinq中使用擴展方法嗎?」?我該如何做到這一點?

編輯09/09/2011: 我已經聯繫了Telerik的支持,這是他們的答案:

不幸的是,你不能延長納入Telerik.Web.UI動態LINQ功能。 DLL。因此,對DynamicLinq類的更改不會影響RadControl內部使用的ExpressionParser。但是,您可以嘗試更改Dynamic Linq庫並通過從RadGrid分析中獲取過濾器表達式並將它們傳遞給已更改的Dynamic Linq類的方法並將RadGrid綁定到返回的數據來執行自定義過濾。我附加了一個小示例,演示瞭如何使用RadGrid的過濾器/排序表達式對ObjectDataSource進行過濾,排序和分頁。

+0

什麼命名空間是'IsSqlLikeMatch'方法? – Justin

+0

它寫了一個類,它包含我所有的擴展方法,但我沒有爲這個類指定一個名稱空間。 – thomasvdb

+1

您可能想嘗試將它放入'System.Linq'命名空間 - 我不確定我是否建議將此作爲一個長期解決方案,但是如果發現該方法會很有趣。 – Justin

回答

0

爲了使用擴展方法,您必須具有using指令,用於定義擴展方法的類的名稱空間。

因此,請嘗試將您的課程放在名稱空間中,併爲其添加using

此外,請確保將此類定義爲公共靜態。

+0

我已經在命名空間System.Linq.Dynamic中添加了我的靜態類,但它不被識別。 – thomasvdb

+0

如果您仍然沒有解決問題,則可以發佈無法使用的代碼,以便有人可能會看到問題所在。 – Ran

+0

我在我的問題中添加了Telerik支持的答案。不是一個理想的解決方案... – thomasvdb