2010-09-18 53 views
4

我需要估計(並可能在稍後構建)ASP.NET WebForms應用程序中的複雜篩選器。過濾器必須基於ASP.NET AJAX或jQuery來實現高交互性。該過濾器必須允許過濾具有複雜邏輯條件(和,或,大括號)和多個操作員的數據。用戶必須能夠保存過濾器的查詢並稍後使用它(加載它)(服務器邏輯)。而且在運營商方面還有一些討論。Web應用程序中的複雜篩選

應用程序應該提供一些圖形過濾器構建器。我想完全控制一組操作數(過濾字段)和操作符。該組件將用於應用程序中的所有過濾操作。我的問題是隻有如何做的UI部分 - 翻譯「建設」的查詢結構不是一個問題。

你有沒有做過這樣的事情?你可以分享一些經驗如何最好和最快的建立這樣的組件?我是否需要開發組件或者是否存在具有至少一些功能並且可以擴展以提供其他功能的現有組件?因爲我對客戶端開發不是很有經驗,所以我不知道從零開始開發這樣的組件有多複雜。

另一種可能性是定義一些元查詢語言並允許用戶將查詢寫入某個查詢文本框,並支持構建邏輯表達式。

我已經檢查可用的控件的DevExpress和Telerik的工具包:

DevExpress

  • 優點:非常好的可視化,速度快。我們可能擁有DevExpress許可證。
  • 缺點:與DevExpress網格緊密結合。基於文檔沒有可擴展性,不能控制操作數和操作符。它使用作爲網格列提供的操作數 - 我需要更多。可能無法保存和加載過濾器。

Telerik

  • 優點:不加上格,它看起來像單獨的控制。
  • 缺點:我沒有找到文檔 - 我不確定可擴展性,但代碼看起來像使用一些數據綁定控件作爲操作數源=問題。我不喜歡可視化。演示非常慢。我們沒有Telerik許可證。

回答

2

我會建議的最重要的事情:保持你的查詢生成器用戶界面完全脫離你使用的任何一個網格。當你緊密結合時,它會迫使你進入設計和技術決策,你可能會後悔。 DevExpress特別傾向於每幾次發佈都有一些重大更改,這可能會迫使您不斷重構代碼。他們也有一些獨特的做事方式,這可能意味着你最終會編碼黑客來達到你想要的。

如果你保持你的UI非常鬆散耦合,你可以按照你想要的方式構建它,然後獲取用戶的輸入並從中創建網格過濾器,然後將這些過濾器添加到網格中。這也意味着,如果您決定在以後交換網格,則只需更改最小代碼(如果您決定嘗試組件,並且需要針對這兩個網格儘可能類似地運行代碼,則此方法也有幫助)。

個人評論 - 在對這兩個組件集進行了廣泛的過濾之後,我會說一件事情:我們搬到Telerik出於某種原因。其實,其實很多原因。我們沒有後悔。此外,Telerik傢伙非常善於幫助他們擴展並使用他們的控件來做些時髦的事情,而DevExpress傢伙傾向於採取態度「你爲什麼想要擴展我們的控制?它們不是已經完美嗎?我們贏得所有人氣畢竟在開發者大會上進行比賽。「。在你承諾一個或另一個之前,你真的需要在它們之間做一個試驗。祝你好運:)

0

讓我來代表DevExpress支持團隊回答你。事實上,我們經常問我們的客戶他們爲什麼要用我們的控制來做這件事或那件事。你可能會認爲這是一種減緩解決問題的過程。但是,從我的角度來看,這種方式是解決問題最快的方法。坐在我們的開發人員附近並且全天使用我們的控制工作,我們通常知道世界上任何人都知道的控制的這些事情。因此,當我們提出與原始任務相比完全不同的解決方案時,這是一種經常出現的情況,它運行得更好,更可靠。

我只能確認最好的解決方案是嘗試兩個不同的控制集,更好地檢查哪一個更符合您的要求,最後做出選擇。

好運:)

+0

謝謝。我可以在DevExpress過濾器中定義自己的一組過濾字段嗎?我需要連接記錄中的文件,這些記錄不是傳遞給網格的結果的一部分。還有可能存儲和加載過濾器表達式? – 2010-09-21 17:09:21

+1

Hi Ladislav, 是的,這是可能的。這可以使用ASPxGridView的HeaderFilterFillItems事件來完成,描述如下: http://documentation.devexpress.com/#AspNet/DevExpressWebASPxGridViewASPxGridView_HeaderFilterFillItemstopic – 2010-09-21 17:24:08

1

我們一直在使用Telerik的的RadControls有一段時間了,我可以說,我們很滿意他們所提供的功能。

我們也一直在試驗RadFilter,這是一個相對較新的控件。該文件可以在這裏找到:http://www.telerik.com/help/aspnet-ajax/filter-overview.html

這裏有一些原因,我們包括RadFilter在我們的應用程序: - 它可以與其它控件一起使用 - 但是,你需要明確定義的字段,使用radgrid控件和RadListView時除外它可以保存/加載表達式 - 它允許您爲構建表達式編寫定製sql - 最酷的功能 - 直接過濾數據源控件 - 我們最近使用它(他們的網站上有演示)

「演示非常慢」 - 由於每次設置更改後執行AJAX請求,速度可能會變慢。 DevEx過濾器(http://demos.devexpress.com/ASPxGridViewDemos/Filtering/FilterBuilder.aspx)的工作方式相同。

+0

謝謝。看上去不錯。示例顯示了手動定義的字段,這是我最重要的要求。 – 2010-09-21 17:07:49