如何在交互式网格上显示所有数据,然后使用 oracle_apex 上的穿梭过滤器减少它?

Posted

技术标签:

【中文标题】如何在交互式网格上显示所有数据,然后使用 oracle_apex 上的穿梭过滤器减少它?【英文标题】:How do I show all of the data on an interactive grid and then reduce it with shuttle filters on oracle_apex? 【发布时间】:2021-06-04 12:37:07 【问题描述】:

我有 5 个穿梭过滤器:Project、Section、Phase、Group、Old_New。 我以一个为例:

Project Filter Buttons Selected Project(s)
Project1 <---
Project2 ---> Project2
Project3

正如我目前拥有的那样,在我填充过滤器之前不会显示数据,但我希望它是相反的。 我认为我的 where 子句出了什么问题,但我不知道如何将过滤器连接到查询。

  WITH T 
    AS (
       SELECT md.ID,
              md.MATERIAL_NUMBER,
              md.MATERIAL_DESCRIPTION,
              md.PROJECT,
              md.SECTION,
              md.PHASE,
              md.GROUP,
              md.OLD_NEW
         FROM MATERIAL_DATA md

    /* P30 is the page my filters are on */
       WHERE  (:P30_PROJECT like '%' || md.PROJECT || '%' or md.PROJECT is NULL)
              AND (:P30_SECTION like '%' || md.SECTION || '%' or md.SECTION is NULL)
              AND (:P30_PHASE like '%' || md.PHASE || '%' or md.PHASE is NULL)
              AND (:P30_GROUP like '%' || md.GROUP || '%' or md.GROUP is NULL)
              AND (:P30_OLD_NEW like '%' || md.OLD_NEW || '%' or md.OLD_NEW is NULL)
       )
SELECT DISTINCT ID,
       MATERIAL_NUMBER,
       MATERIAL_DESCRIPTION,
       PROJECT,
       SECTION,
       PHASE,
       GROUP,
       OLD_NEW
  FROM T

过滤器确实有效,但我的交互式网格是一个空表,直到每个过滤器都有数据填充“选定”部分。 谢谢您的帮助。 =)

【问题讨论】:

各种or md.OLD_NEW is NULL 条件的意图是什么?我的猜测是您打算将它们设为or :P30_OLD_NEW is NULL(如果未选择任何内容,则忽略过滤器),而不是您拥有的,但这只是一个猜测。你的like 条件对我来说也没有多大意义——我敢打赌你想要平等条件,但我不知道你是如何填充你的控件的。 @JustinCave 我没有考虑过,但我认为你是对的。我会很快测试一下。类似的条件是我如何理解能够将过滤器组件连接到交互式网格组件。如果有更好的方法,我全力以赴。 @JustinCave 修复了它。如果您提交您的评论作为答案,我会给您信用。 【参考方案1】:

我的赌注是你真的想要类似的东西

WITH T 
    AS (
       SELECT md.ID,
              md.MATERIAL_NUMBER,
              md.MATERIAL_DESCRIPTION,
              md.PROJECT,
              md.SECTION,
              md.PHASE,
              md.GROUP,
              md.OLD_NEW
         FROM MATERIAL_DATA md

    /* P30 is the page my filters are on */
       WHERE  (:P30_PROJECT = md.PROJECT or :P30_PROJECT is NULL)
              AND (:P30_SECTION = md.SECTION or :P30_SECTION is NULL)
              AND (:P30_PHASE = md.PHASE  or :P30_PHASE is NULL)
              AND (:P30_GROUP = md.GROUP  or :P30_GROUP is NULL)
              AND (:P30_OLD_NEW = md.OLD_NEW  or :P30_OLD_NEW is NULL)
       )
SELECT DISTINCT ID,
       MATERIAL_NUMBER,
       MATERIAL_DESCRIPTION,
       PROJECT,
       SECTION,
       PHASE,
       GROUP,
       OLD_NEW
  FROM T

但我不知道您的各种页面项目的确切值是什么以及您希望返回什么值。如果每个页面项都有一个以冒号分隔的值列表,你会想要更像

WITH T 
    AS (
       SELECT md.ID,
              md.MATERIAL_NUMBER,
              md.MATERIAL_DESCRIPTION,
              md.PROJECT,
              md.SECTION,
              md.PHASE,
              md.GROUP,
              md.OLD_NEW
         FROM MATERIAL_DATA md

    /* P30 is the page my filters are on */
       WHERE  (md.PROJECT member of apex_string.split(:P30_PROJECT,':') or :P30_PROJECT is NULL)
              AND (md.SECTION member of apex_string.split(:P30_SECTION, ':') or :P30_SECTION is NULL)
              AND (md.PHASE member of apex_string.split(:P30_PHASE, ':') or :P30_PHASE is NULL)
              AND (md.GROUP member of apex_string.split(:P30_GROUP, ':') or :P30_GROUP is NULL)
              AND (md.OLD_NEW member of apex_string.split(:P30_OLD_NEW, ':') or :P30_OLD_NEW is NULL)
       )
SELECT DISTINCT ID,
       MATERIAL_NUMBER,
       MATERIAL_DESCRIPTION,
       PROJECT,
       SECTION,
       PHASE,
       GROUP,
       OLD_NEW
  FROM T

【讨论】:

以上是关于如何在交互式网格上显示所有数据,然后使用 oracle_apex 上的穿梭过滤器减少它?的主要内容,如果未能解决你的问题,请参考以下文章

extjs 4 如何更改网格上显示的列下拉列表的顺序

如何使用IG方法将新记录添加到交互式网格中,然后使用$ s()api设置列的值?

如何显示所有可能颜色的网格?

从关键字搜索中突出显示数据网格上的所有匹配字符串/子字符串

Oracle APEX 交互式网格:如何使用 PLSQL 访问内容?

如何在 WPF 数据网格中显示 N 个项目?