C/C++教程

Oracle Form - 一种全选/全不选功能设计

本文主要是介绍Oracle Form - 一种全选/全不选功能设计,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
  • 功能设计

 

 

 

  • 设计思路

全选/全不选框要实现的是:1、自己被勾选,就将列表全部勾选;2、自己被取消,就将列表全部取消

列表单选框要实现的是:自己被取消,互动取消全选框 

  • 开发实现
  1. 列表中的复选框:数据块中增加ITEM,子类信息CHECKBOX,选中时值Y,未选中值N(本例中为DETAILS.SELECTED)
  2. 全选/全不选框:一个非数据库项,子类信息CHECKBOX,选中时值Y,未选中值N(本例中为CONTROL.SELECT_ALL)
  3. 增加一个参数ALL_SELECTED,初始值N,用来记录列表是否为全部选中之状态
  4. CONTROL.SELECT_ALL触发器WHEN-CHECKBOX-CHANGED代码
declare
  l_cursor_record number;
begin
  if :control.select_all = 'Y' then
    -- 勾选
    if nvl(:parameter.all_selected, 'N') != 'Y' then
      -- 此时列表的状态不是全部选中
      go_block('DETAILS');
      -- 遍历每一行,并勾选复选框,最后停在列表一开始定位的行     
      loop
        exit when :system.cursor_record = l_cursor_record;
        l_cursor_record := nvl(l_cursor_record, :system.cursor_record);
        if :details.po_num is not null then
          :details.selected := 'Y';
        end if;
        if :system.last_record = 'TRUE' then
          first_record;
        else
          next_record;
        end if;
      end loop;
      -- 记录列表状态为全部选中
      :parameter.all_selected := 'Y';
    end if;
  elsif :control.select_all = 'N' then
    -- 去掉勾选
    if :parameter.all_selected = 'Y' then
      -- 此时列表的状态是全部选中
      go_block('DETAILS');
      -- 遍历每一行,并取消复选框,最后停在列表一开始定位的行     
      loop
        exit when :system.cursor_record = l_cursor_record;
        l_cursor_record := nvl(l_cursor_record, :system.cursor_record);
        if :details.po_num is not null then
          :details.selected       := 'N';
          :parameter.all_selected := 'N';
        end if;
        if :system.last_record = 'TRUE' then
          first_record;
        else
          next_record;
        end if;
      end loop;
    end if;
  end if;
end;
  1.  DETAILS.SELECTED触发器WHEN-CHECKBOX-CHANGED
if :details.selected = 'N' then
	-- 被取消选中,记录列表状态为未全选,并联动取消全选复选框
    :parameter.all_selected := 'N';
	:control.select_all := 'N';
end if;

这篇关于Oracle Form - 一种全选/全不选功能设计的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!