如何在不指定其值列表的情况下创建选择列表?

时间:2014-08-08 14:23:10

标签: oracle oracle-apex

我有一个有两个选择列表的表单。第一个是预先填充的SQL查询,并具有动态操作,可根据第一个列表中选择的内容设置第二个列表的值。

我用选择列表 - 文本框组合测试了它,它工作得很好。但是,当我尝试将文本框更改为选择列表时,我不得不提供一个“值列表”来覆盖我的动态操作。

如何创建选择列表而不指定其值列表?

对我的情况做了一些澄清。

我有2张桌子:Wines和Winegroups。

+---------+------------+
|  Wines  | Winegroups |
+---------+------------+
| WineID  | GroupID    |
| Name    | Name       |
| GroupID |            |
+---------+------------+

在APEX中,我有一个这样的表格:

enter image description here

加载页面后,第一个选择列表将使用此查询填充值:

select distinct Name, GroupID from Winegroups

此外,还有一个像这样定义的动态动作,只要选择了一个组就会触发。这应该会改变'葡萄酒'选择列表中的值。

活动:更改
选择类型P5_GROUPID上的项目 操作:设置值
要提交的网页项目P5_GROUPID
受影响的元素P5_NAME

上的项目
select distinct Wines.Name, Wines.WineID id
from Wines
left join Winegroups
 on Wines.GroupID = Winegroups.GroupID
where Winegroups.Name = :P5_GROUPID
order by 1

第二个选择列表使用相同的查询。当我执行我的程序时,第一个选择列表很好地填充了组,但第二个选择列表永远不会获得任何值。

1 个答案:

答案 0 :(得分:3)

从apex 4.1开始,不再需要使用动态操作来根据前一个选择的值填充一个选择列表。要获得所需的功能,您应该能够:

  1. 禁用或删除当前的动态操作。
  2. 进入葡萄酒选择列表页面项目(P5_NAME)。
  3. 在“值列表”部分中,对于“级联LOV父项”字段,选择葡萄酒组选择列表项(P5_GROUPID)。
  4. 要提交的页面项目字段将显示在同一部分中。同时选择P5_GROUPID
  5. 在值列表定义中,按照上面的说法进行查询:
  6.  
    select distinct Wines.Name, Wines.WineID id  
    from Wines  
    left join Winegroups  
    on Wines.GroupID = Winegroups.GroupID  
    where Winegroups.Name = :P5_GROUPID  
    order by 1;
    

    编辑以回答评论中的问题:

    当你这样做时:

    select distinct Name, GroupID 
    from Winegroups; 
    

    对于选择列表,它向用户显示名称,但存储groupid。如果你想使用名字,你可以这样做:

    select name d, name r 
    from winegroups; 
    

    作为您的winegoup选择列表查询。那么P5_GROUPID中的值实际上就是名称,您可以将它加入wine选择列表查询中的winegroups.name。当然,如果要执行此操作,还应重命名P5_GROUPID。

    但我可能只是保持原样。这样,您实际上不需要在第二个查询中加入。你可以做到:

    select wines.name, wines.wineid 
    from wines where groupid = :P5_GROUP_ID.
    

    这将是最干净的实施。