【问题标题】:DropDown filter level wise下拉过滤器级别明智
【发布时间】:2019-12-21 10:13:13
【问题描述】:

我想设计一个下拉过滤器的表单。我从一个下拉列表中选择分店,下一个商店的下拉菜单应该只显示该分店而不是整个商店。

PROCEDURE make_list IS
group_id recordgroup;
status number;
BEGIN
   group_id := Create_Group_From_Query('STORE','select STORE_NAME, TO_CHAR(STORE_ID) 
                                                  from inv_stores 
                                                 where BRANCH_ID = :BRANCH_ID'); 
   status := Populate_Group('STORE'); 
   Populate_List('STORE',group_id); 
exception when no_data_found then
      null;
END;

【问题讨论】:

  • 用Populate_List('STORE_ID','STORE'); 替换你的第7 行,就像我的情况一样(其中'STORE_ID' 应该是图像中Store 列表项的名称)。顺便说一句,exception when no_data_found then null; 是多余的。
  • @BarbarosÖzhan 我已经按照你说的做了,但是没有用。
  • @BarbarosÖzhan Sir 现在显示错误:FRM-41072 无法创建组 STORE。
  • 你确定查询是独立工作的吗?顺便说一句,您可能需要别名 to_char(store_id) (例如 to_char(store_id) as str_id ),我想知道您为什么要尝试进行这样的转换...
  • @BarbarosÖzhan 是的,先生,相同的查询适用于其他工作完美但现在在这种过滤器情况下不起作用

标签: oracle dropdown oracleforms


【解决方案1】:

我更喜欢使用值列表。演练比较简单:

  • 创建将选择您需要的数据的记录组 (RG) 查询
    • 第二个 RG 查询应该引用由第一个 LoV 填充的项目;这就是所谓的“级联”
  • 为每个 RG 创建值列表 (LoV)
  • 将 LoV 附加到他们的项目(项目的属性面板中有一个属性)

我猜就是这样。

【讨论】:

  • PROCEDURE make_list IS group_id 记录组;状态编号; BEGIN group_id := Create_Group_From_Query('STORE','select STORE_NAME, TO_CHAR(STORE_ID) from inv_stores where BRANCH_ID = :BRANCH_ID');状态 := Populate_Group('STORE'); Populate_List('STORE_ID',group_id);当 no_data_found 然后为 null 时出现异常;结尾;我正在尝试这个
【解决方案2】:

假设您有两个连续的列表项,即l_province 和l_district。对于l_province项的每次更改,为了让下属地区重新填充l_district项,l_district必须是Combo Box列表样式。保持这种风格,删除当前列表项(Clear_List 方法)将能够工作。

所以,在l_province 项下添加一个WHEN-LIST-CHANGED 触发器,代码如下:

Declare
    i            pls_integer;       
    status       pls_integer;
    group_id     RecordGroup;

Begin
    group_id := Create_Group_From_Query('g_province','Select province_code||' - '||province_name, 
                                                             province_code 
                                                        From tab_province Order By province_code');
    status := Populate_Group('g_province'); 
    Populate_List('l_province','g_province');    


    Clear_List('l_district');        

   i:=1;
   for c in ( select * from tab_district where province_code = :l_province 
               order by nlssort(district_name,'nls_sort=xturkish') ) -- replace `turkish` depending on your language. No needed for `english` case. 
   loop
     Add_List_Element( 'l_district', i , c.district_name, c.l_district_code ); 
     i:=i+1;
   end loop;

End;

这里我尝试展示两种填充列表项的样式。

更新:对于您当前的情况,请在表单级别创建一个参数并用作:

PROCEDURE make_list IS
   group_id recordgroup;
   status   number;
BEGIN
  :parameter.p_branch_id := :branch_id;    
   group_id := Create_Group_From_Query('STORE','select store_name, to_char(store_id)                                     
                                                  from inv_stores 
                                                 where branch_id = :parameter.p_branch_id'); 
   status := Populate_Group('STORE'); 
   Populate_List('branch_id','STORE'); 

END;

【讨论】:

  • PROCEDURE make_list IS group_id recordgroup; status number; BEGIN group_id := Create_Group_From_Query('STORE','select STORE_NAME, TO_CHAR(STORE_ID) from inv_stores where BRANCH_ID = :BRANCH_ID'); status := Populate_Group('STORE'); Populate_List('STORE_ID',group_id); exception when no_data_found then null; END;我正在尝试这个,但它不起作用
猜你喜欢
  • 1970-01-01
  • 2023-04-11
  • 2020-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-20
  • 1970-01-01
相关资源
最近更新 更多