【问题标题】:Complex filtering in web applicationWeb 应用程序中的复杂过滤
【发布时间】:2011-04-14 01:33:54
【问题描述】:

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

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

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

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

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

DevExpress:

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

Telerik:

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

【问题讨论】:

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


    【解决方案1】:

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

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

    个人评论 - 在对这两个组件集进行广泛过滤之后,我要说一件事:我们搬到 Telerik 是有原因的。嗯,其实有很多原因。我们并没有遗憾地回头。此外,Telerik 的人非常擅长帮助扩展并用他们的控件做一些时髦的事情,而 DevExpress 的人倾向于采取这样的态度“你为什么要扩展我们的控件?他们不是已经完美了吗?我们赢了所有毕竟是开发者大会上的人气竞赛。”。在您承诺其中一个之前,您确实需要在他们之间进行试验。祝你好运:)

    【讨论】:

      【解决方案2】:

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

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

      祝你好运:)

      【讨论】:

      • 谢谢。我可以在 DevExpress 过滤器中定义自己的过滤字段集吗?我需要来自连接记录的文件,这些文件不是传递给网格的结果的一部分。是否也可以存储和加载过滤器表达式?
      • 嗨拉迪斯拉夫,是的,这是可能的。这可以使用 ASPxGridView 的 HeaderFilterFillItems 事件来完成,描述于documentation.devexpress.com/#AspNet/…
      【解决方案3】:

      我们已经使用 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) 的工作方式相同。

      【讨论】:

      • 谢谢。这看起来不错的样子。示例显示了字段的手动定义,这是我最重要的要求。
      猜你喜欢
      • 1970-01-01
      • 2014-01-24
      • 1970-01-01
      • 1970-01-01
      • 2011-01-25
      • 1970-01-01
      • 1970-01-01
      • 2011-04-07
      • 2011-10-17
      相关资源
      最近更新 更多