3

我在 Oracle APEX 5.1 中创建了一个关于 SQL 查询的交互式报告,并添加了另外两列进行查询。一个是报告中每一行的复选框,另一个是包含每行数字的选择列表。SQL查询写在下面。我想要做的是在选中相关复选框时启用选择列表,否则最终用户不应该能够从列表中选择数字。我知道这可以通过动态操作来完成,但我无法指出解决方案。

为什么我要禁用选择列表:我可以通过 pl/sql 中的 for 循环通过名为 APEX_APPLICATION.G_F01 的数组达到复选框的返回值。在数组内部,有已检查的行,但我无法通过 APEX_APPLICATION.G_F02 达到已检查的行数,这是选择列表的值数组,因为该数组还包含不希望的、未检查的值列。我找到了在选中复选框时启用选择列表的解决方案。

询问:

SELECT  APEX_ITEM.CHECKBOX2(1,URUN.BARKOD) "Select", U.AD, MA.AD MAGAZA_ADI, FIYAT, APEX_ITEM.SELECT_LIST(
        p_idx           =>   2,
        p_list_values   =>   '1;1,2;2,3;3,4;4,5;5,6;6,7;7,8;8,9;9,10;10',
        p_show_null     =>   'YES',
        p_null_value    =>   NULL,
        p_null_text     =>   '-0-',
        p_item_id       =>   'f03_#ROWNUM#',
        p_item_label    =>   'Label for f03_#ROWNUM#') "Adet"
FROM URUNSATIS URUN, UYE UN, ADRES AD, ANLASMALAR AN, MAGAZA MA, URUN U
WHERE UN.USERNAME = :SESSION_USER_NAME AND UN.ID = AD.UYE_ID AND AD.APARTMAN_ID = AN.APARTMAN_ID AND AN.MAGAZA_ID = URUN.MAGAZA_ID AND MA.ID = URUN.MAGAZA_ID AND U.BARKOD=URUN.BARKOD
ORDER BY 1;

这个问题背后的想法:我希望最终用户从报告中选择产品,当他们选择所需产品的复选框时,他们应该能够选择他们想从市场订购的产品数量。我被困在应用程序的这个阶段。我对解决这个问题的任何新想法持开放态度。

4

2 回答 2

1

您可以使用p_checked_attributes复选框上的选项来跟踪通过隐藏项检查了哪些项,然后根据值是否包含在隐藏项中进行动态操作来禁用/启用。

所以你的选择查询看起来像这样:

SELECT 
    APEX_ITEM.CHECKBOX2(p_idx => 1, 
                        p_value => URON.BARKOD,
                    --    p_attributes => 'class="barkod"', use this value if you want to keep track after refresh
                        p_checked_values => :P1_BARKOD_LIST,
                        p_checked_values_delimiter => ',') AS "SELECT",
    U.AD, MA.AD MAGAZA_ADI, FIYAT, 
    APEX_ITEM.SELECT_LIST(
        p_idx           =>   2,
        p_list_values   =>   '1;1,2;2,3;3,4;4,5;5,6;6,7;7,8;8,9;9,10;10',
        p_show_null     =>   'YES',
        p_null_value    =>   NULL,
        p_null_text     =>   '-0-',
        p_item_id       =>   'f03_#ROWNUM#',
        p_item_label    =>   'Label for f03_#ROWNUM#') "Adet"
FROM URUNSATIS URUN, UYE UN, ADRES AD, ANLASMALAR AN, MAGAZA MA, URUN U
WHERE UN.USERNAME = :SESSION_USER_NAME AND UN.ID = AD.UYE_ID AND AD.APARTMAN_ID = AN.APARTMAN_ID AND AN.MAGAZA_ID = URUN.MAGAZA_ID AND MA.ID = URUN.MAGAZA_ID AND U.BARKOD=URUN.BARKOD
ORDER BY 1;
于 2017-08-14T07:08:23.783 回答
1
  1. 将类属性添加到您的复选框
  2. 将您的选择列表 ID 命名为 fixe
SELECT  APEX_ITEM.CHECKBOX2(1,URUN.BARKOD,'class=indCheck') "Select", U.AD, MA.AD MAGAZA_ADI, FIYAT, APEX_ITEM.SELECT_LIST(
        p_idx           =>   2,
        p_list_values   =>   '1;1,2;2,3;3,4;4,5;5,6;6,7;7,8;8,9;9,10;10',
        p_show_null     =>   'YES',
        p_null_value    =>   NULL,
        p_null_text     =>   '-0-',
        p_item_id       =>   'indSelect',
        p_item_label    =>   'Label for f03_#ROWNUM#') "Adet"
FROM URUNSATIS URUN, UYE UN, ADRES AD, ANLASMALAR AN, MAGAZA MA, URUN U
WHERE UN.USERNAME = :SESSION_USER_NAME AND UN.ID = AD.UYE_ID AND AD.APARTMAN_ID = AN.APARTMAN_ID AND AN.MAGAZA_ID = URUN.MAGAZA_ID AND

MA.ID = URUN.MAGAZA_ID 和 U.BARKOD=URUN.BARKOD 按 1 排序;

  1. 现在创建一个动态动作,点击你的复选框执行 javascript 代码: 达

  2. 这里是javascript代码

    $(this.triggeringElement).closest('tr').find('td select#indSelect').attr('disabled',false); if ( $(this.triggeringElement).is(':checked') ) $(this.triggeringElement).closest('tr').find('td select#indSelect').attr('disabled',true);

于 2017-08-14T13:14:42.180 回答