选中复选框获取所选行的值

时间:2018-11-25 00:05:46

标签: oracle-apex

对于每行都有一个带复选框的服务表报告,我试图获取所选服务的值,以便当我单击下一步时,可以使用新页面中选择的服务创建报告。 / p>

我已经尝试过这种方式:

服务表的报告。

select code,
        name,
        cost,
        apex_item.hidden(p_idx   => 1, 
            p_value => code) ||
        apex_item.hidden(p_idx   => 2, 
            p_value => cost) ||
        apex_item.checkbox2(p_idx   => 3, 
            p_value => code) CheckBox
from services

enter image description here

我创建了一个过程。

来源:

begin
    apex_collection.CREATE_OR_TRUNCATE_COLLECTION ('SDBA_ORDER_ITEMS1');

    for i in 1..apex_application.g_f01.count loop
        apex_collection.add_member(
            p_collection_name => 'SDBA_ORDER_ITEMS1',
            p_c001            => to_number(apex_application.g_f01(i)), -- service_code
            p_c002            => to_number(apex_application.g_f02(i)), -- cost
            p_c003            => to_number(apex_application.g_f03(i)) -- service_code
        );
    end loop;
end;

服务器端条件:

begin
    for i in 1..apex_application.g_f01.count loop
        for j in 1..apex_application.g_f03.count loop
            if apex_application.g_f01(i) = apex_application.g_f03(j) then
                return true;
            else
                return false;
            end if;
        end loop;
    end loop;
end;

Report on the next page.

select (select name from services where code = c001) as service_name,
       c002 as cost
from apex_collections
where collection_name = 'SDBA_ORDER_ITEMS1'
order by 1

在下一页上报告。

select (select name from services where code = c001) as service_name,
       c002 as cost
from apex_collections
where collection_name = 'SDBA_ORDER_ITEMS1'
order by 1

在此报告中,它显示表中的所有服务,而不是所选服务。

如何仅获取选定的行?有人可以帮我吗?

先谢谢了。

2 个答案:

答案 0 :(得分:0)

复选框会形成密集的集合,不会像其他项类型那样稀疏。我认为这是网络技术的产品,而不是APEX。

因此,如果您有ID,名称和复选框

1 - ada - checked
2 - charles - not checked
3 - alan - checked 

ID和Names数组中将有3个索引元素,而复选框数组中只有2个-索引元素3将为空。

因此,您需要通过按代码值编制索引来匹配复选框是否存在,并更像是检查存在性

apex_application.g_f03(apex_application.g_f01.code)

照顾潜在的no_data_found

答案 1 :(得分:0)

阅读Oracle documentation

<块引用>

请注意,使用 APEX_ITEM.CHECKBOX 显示的复选框仅包含 APEX_APPLICATION 数组中被选中的那些行的值。与其他项(TEXT、TEXTAREA 和 DATE_POPUP)不同,这些项(TEXT、TEXTAREA 和 DATE_POPUP)可以为提交的每一行在相应的 APEX_APPLICATION 数组中包含一个条目,如果选中复选框,则该复选框仅在 APEX_APPLICATION 数组中包含一个条目。

我在 APEX_ITEM.CHECKBOX 上构建了引用 rownum 的报告。

报告代码:

SELECT APEX_ITEM.CHECKBOX(p_idx => 1, p_value => ROWNUM) checkb
      ,APEX_ITEM.HIDDEN(p_idx => 2, p_value => CUSTOMER_ID)||CUSTOMER_ID CUSTOMER_ID
      ,APEX_ITEM.HIDDEN(p_idx => 3, p_value => CUST_STATE)||CUST_STATE CUST_STATE
      ,CUST_FIRST_NAME ||' '||CUST_LAST_NAME   
  FROM DEMO_CUSTOMERS   

然后根据选中的行,恢复隐藏项数组对应位置的值。

处理 PL/SQL 代码:

BEGIN  
  --
  FOR i IN 1..APEX_APPLICATION.G_F01.COUNT LOOP      
      --
      INSERT INTO ROMINA_TEST (LOG)
      VALUES ('CUSTOMER_ID: '||APEX_APPLICATION.G_F02(APEX_APPLICATION.G_F01(i))||' - CUST_STATE: '||APEX_APPLICATION.G_F03(APEX_APPLICATION.G_F01(i)));
      --      
  END LOOP;
  --
END;  

它有效! =)