【问题标题】:How to select a checkbox and auto select other related checkbox.?如何选择一个复选框并自动选择其他相关的复选框。?
【发布时间】:2015-03-10 03:29:27
【问题描述】:

我有以下代码。我的目标是选择一个复选框,然后所有与 otehr 相关的复选框也将被选中。当我选择第一个复选框和下一个组复选框时,我可以自动选择其他复选框,但是当我选择第二个复选框并且第一个复选框与第二个复选框相关时它不起作用,第一个复选框不会自动选中,

看起来循环没有来回。我的代码哪里出了问题?

DECLARE
    v_selected_contract       VARCHAR2 (50);
    v_selected_contract_ver   NUMBER;
    v_selected_contract_n     VARCHAR2 (50);
    v_selected_contract_ver_n NUMBER;
BEGIN
    Go_block('PCMS_CONTRACT_LINES');

    --  first_record;
    IF :PCMS_CONTRACT_LINES.selected = 'Y' THEN
      v_selected_contract := :PCMS_CONTRACT_LINES.contract_num;
      v_selected_contract_ver := :PCMS_CONTRACT_LINES.contract_version_num;

      WHILE :PCMS_CONTRACT_LINES.contract_num = v_selected_contract
            AND :PCMS_CONTRACT_LINES.contract_version_num =
                v_selected_contract_ver
      LOOP
          :PCMS_CONTRACT_LINES.selected := 'Y';
          EXIT WHEN :System.last_record = 'TRUE';
          next_record;
      END LOOP;
      Go_block('PCMS_CONTRACT_LINES');
      first_record;
    ELSE
      v_selected_contract_n := :PCMS_CONTRACT_LINES.contract_num;
      v_selected_contract_ver_n := :PCMS_CONTRACT_LINES.contract_version_num;

      WHILE :PCMS_CONTRACT_LINES.contract_num = v_selected_contract_n
            AND :PCMS_CONTRACT_LINES.contract_version_num =
                v_selected_contract_ver_n LOOP
          :PCMS_CONTRACT_LINES.selected := 'N';
          EXIT WHEN :System.last_record = 'TRUE';
          next_record;
      END LOOP;

      Go_block('PCMS_CONTRACT_LINES');

      first_record;
    END IF;
END; 

【问题讨论】:

    标签: plsql oracleforms


    【解决方案1】:

      Go_block('PCMS_CONTRACT_LINES');
      first_record;
    

    应该在你开始循环之前在那里,否则如果你点击第二条记录,第二条之后的记录将被选中,循环退出,控制转到第一条记录,但你没有选择它.

    应该是这样的:

    DECLARE
        v_selected_contract       VARCHAR2 (50);
        v_selected_contract_ver   NUMBER;
        v_selected_contract_n     VARCHAR2 (50);
        v_selected_contract_ver_n NUMBER;
    BEGIN
    
        IF :PCMS_CONTRACT_LINES.selected = 'Y' THEN -- first current record is checked
           Go_block('PCMS_CONTRACT_LINES');   -- go to the block 
           first_record;  -- first record, then loop and select all.
          v_selected_contract := :PCMS_CONTRACT_LINES.contract_num;
          v_selected_contract_ver := :PCMS_CONTRACT_LINES.contract_version_num;
    
          WHILE :PCMS_CONTRACT_LINES.contract_num = v_selected_contract
                AND :PCMS_CONTRACT_LINES.contract_version_num =
                    v_selected_contract_ver
          LOOP
              :PCMS_CONTRACT_LINES.selected := 'Y';
              EXIT WHEN :System.last_record = 'TRUE';
              next_record;
          END LOOP;
          Go_block('PCMS_CONTRACT_LINES');
          first_record;
        ELSE
          Go_block('PCMS_CONTRACT_LINES');   -- go to the block 
          first_record;  -- first record, then loop and unselect all.
          v_selected_contract_n := :PCMS_CONTRACT_LINES.contract_num;
          v_selected_contract_ver_n := :PCMS_CONTRACT_LINES.contract_version_num;
    
          WHILE :PCMS_CONTRACT_LINES.contract_num = v_selected_contract_n
                AND :PCMS_CONTRACT_LINES.contract_version_num =
                    v_selected_contract_ver_n LOOP
              :PCMS_CONTRACT_LINES.selected := 'N';
              EXIT WHEN :System.last_record = 'TRUE';
              next_record;
          END LOOP;
    
          Go_block('PCMS_CONTRACT_LINES');
    
          first_record;
        END IF;
    END; 
    

    【讨论】:

    • 你的意思是我取消注释 --first_record 吗?谢谢。
    • 嗨,在我取消注释该行后,我可以选择第一个复选框并自动选中第二个复选框,但如果我先选中第二个复选框,则无法选中两个复选框并保持未选中状态
    • 查看我的编辑,first_record 应该在 if & else 部分下
    猜你喜欢
    • 2020-10-02
    • 2018-12-19
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 2020-10-12
    • 2020-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多