- 功能设计
- 设计思路
全选/全不选框要实现的是:1、自己被勾选,就将列表全部勾选;2、自己被取消,就将列表全部取消
列表单选框要实现的是:自己被取消,互动取消全选框
- 开发实现
- 列表中的复选框:数据块中增加ITEM,子类信息CHECKBOX,选中时值Y,未选中值N(本例中为DETAILS.SELECTED)
- 全选/全不选框:一个非数据库项,子类信息CHECKBOX,选中时值Y,未选中值N(本例中为CONTROL.SELECT_ALL)
- 增加一个参数ALL_SELECTED,初始值N,用来记录列表是否为全部选中之状态
- 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;
- DETAILS.SELECTED触发器WHEN-CHECKBOX-CHANGED
if :details.selected = 'N' then
-- 被取消选中,记录列表状态为未全选,并联动取消全选复选框
:parameter.all_selected := 'N';
:control.select_all := 'N';
end if;