Web应用程序中的复杂过滤

时间:2010-09-18 10:14:47

标签: asp.net jquery asp.net-ajax filtering

我需要在ASP.NET WebForms应用程序中估计(可能稍后构建)复杂的过滤器。过滤器必须主要基于ASP.NET AJAX或jQuery以实现高交互性。过滤器必须允许过滤具有复杂逻辑条件(和/或括号)和多个运算符的数据。用户必须能够保存过滤器的查询并在以后使用它(加载它)(服务器逻辑)。此外,还有关于运营商的讨论。

应用程序应该提供一些图形过滤器构建器。我想完全控制操作数集(过滤字段)和运算符。该组件将用于应用程序中的所有筛选操作。我的问题只是如何做UI部分 - 构建“查询结构”的翻译不是问题。

你曾经做过类似的事吗?你能分享一些如何最好和最快地构建这样的组件的经验吗?我是否需要开发组件,或者是否存在至少具有某些功能的现有组件,并且可以扩展以提供其他功能?因为我对客户端开发不是很有经验,所以我不知道从头开始开发这样的组件是多么复杂的任务。

另一种可能性是定义一些元查询语言,并允许用户将查询写入某个查询文本框,并支持构建逻辑表达式。

我已经检查过DevExpress和Telerik工具包中的可用控件:

DevExpress

  • 优点:非常好的可视化,快速。我们可能有DevExpress许可证。
  • 缺点:与DevExpress网格紧密结合。基于文档没有可扩展性,也无法控制操作数和运算符。它使用作为网格列提供的操作数 - 我需要更多。可能无法保存和加载过滤器。

Telerik

  • 优点:没有网格,它看起来像是单独控制。
  • 缺点:我没有找到文档 - 我不确定可扩展性,但代码看起来像使用一些数据绑定控件作为操作数=问题的来源。我不喜欢可视化。演示真的很慢。我们没有Telerik许可证。

3 个答案:

答案 0 :(得分:2)

我建议最重要的事情是:让您的查询构建器UI与您使用的网格完全分开。当你紧密耦合时,它会迫使你进入设计和技术决策,你可能会后悔。 DevExpress特别倾向于每两个版本都有一些重大更改,这可能会迫使您不断重构代码。他们也有一些独特的做事方式,这可能意味着你最终编码黑客以实现你想要的东西。

如果您保持UI非常松散耦合,您可以按照您想要的方式构建它,然后获取用户的输入并从中创建网格过滤器,然后将这些过滤器添加到网格中。这也意味着如果您决定在以后交换网格,您只需要更改代码的最小值(如果您决定试用组件并且需要针对两个网格运行尽可能类似的代码,这种方法也会有所帮助)。

个人评论 - 在对这两个组件集进行大量过滤后,我会说一件事:我们之所以搬到Telerik是有原因的。嗯,实际上有很多原因。而且我们没有后悔。此外,Telerik的家伙非常善于帮助扩展并使用他们的控件做一些时髦的东西,而DevExpress的人倾向于采取态度“你为什么要扩展我们的控制?他们不是已经完美了吗?我们赢了所有人毕竟,在开发者大会上的人气竞赛。“。在你承诺之前,你真的需要在它们之间进行试验。祝你好运:)

答案 1 :(得分: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)的工作方式相同。

答案 2 :(得分:0)

让我代表DevExpress的支持团队回答您。实际上,我们经常会问客户为什么要使用我们的控件来做这件事或那件事。您可能认为这是一种减缓解决问题的过程的方法。但是,从我的角度来看,这种方式是解决问题的最快方法。我们坐在我们的开发人员附近并且通过我们的控件全天工作,我们通常知道世界上任何人都知道的控件。因此,当我们建议与原始任务相比完全不同的解决方案时,这是一种常见的情况,并且它工作得更好,更可靠。

我只能确认最好的解决方案是尝试两种不同的控制装置,检查哪一种更符合您的要求,最后做出选择。

祝你好运:)