您的位置:首页 > 其它

OO ALV 实现下拉框

2014-01-22 09:25 471 查看
ooALV相关的:
http://blog.sina.com.cn/s/blog_c0978c9b0101hesn.html

至于下拉框,主要的地方如下:

*…………………………………………………………………………………………
* lvc_s_fcat
指定某字段为下拉框
*…………………………………………………………………………………………

DATA: wa_fieldcatalog  
 TYPE lvc_s_fcat,  
 "显示数据列内表工作区域
   
  it_fieldcatalog  
 TYPE lvc_t_fcat.  
 "显示数据列内表

DEFINE mac_fieldlog.
* g_pos = g_pos + 1.    
     
     
     
     
  "第几列
* wa_fieldcatalog-col_pos  
      = g_pos.
     
  "列
  wa_fieldcatalog-fieldname
      =
&1.    
     
 "字段名称
* wa_fieldcatalog-coltext  
      =
&2.    
     
 "显示名称,跟reptext效果基本相同
  wa_fieldcatalog-reptext  
      =
&2.
  wa_fieldcatalog-outputlen
      =
&3.    
     
 "显示长度

……  其他相关逻辑 ……
"对AAA字段实现下拉框显示
  if &1 eq
'AAA'.

   
 wa_fieldcatalog-edit  
  = 'X'.    
     
    "可编辑

   
wa_fieldcatalog-drdn_hndl = '1'.  
     
     
"下拉框句柄1

   
wa_fieldcatalog-outputlen = 7.

  endif.

"对BBB字段实现下拉框显示

  if
&1 eq 'BBBB'.

 
  wa_fieldcatalog-drdn_hndl = '2'.
     
     
 "下拉框句柄2

 
endif.


  append wa_fieldcatalog to
it_fieldcatalog.
  clear wa_fieldcatalog.
END-OF-DEFINITION.

*…………………………………………………………………………………………
* 调用类,实现下拉框功能

*…………………………………………………………………………………………

DATA: g_alv_grid    TYPE REF
TO cl_gui_alv_grid,    
     
     
    "ALV类
     
alv_ctner     TYPE REF TO
cl_gui_docking_container.

FORM zform_alv_show .
  DATA:   l_style
     TYPE
i,
     
    ls_layout  
 TYPE lvc_s_layo,
     
    is_stable  
 TYPE lvc_s_stbl,
     
    l_disvariant TYPE
disvariant.

* 屏幕初始化
  IF alv_ctner IS INITIAL.

    CREATE OBJECT
alv_ctner
     
EXPORTING
     
  repid    
     
     
      =
sy-repid
     
  dynnr    
     
     
      =
'9001'
*      
side      
     
     
     =
cl_gui_docking_container=>dock_at_right
   
 ”ALV贴屏幕右边,从屏幕右边开始算宽度
     
  side    
     
     
     
 =
cl_gui_docking_container=>dock_at_left
     
"ALV贴屏幕左边,从左边算屏幕宽度,
     
  extension    
     
     
  = 900    
     
     
     
     
     
     
 "屏幕宽度
*      
 style    
     
     
      =
cl_gui_control=>ws_child  
     
     
     
"可选参数,设置ALV是否可用手动拖动大小
     
EXCEPTIONS
     
  cntl_error    
     
     
 = 1
     
  cntl_system_error  
     
  = 2
     
  create_error  
     
     
 = 3
     
  lifetime_error  
     
     = 4
     
  lifetime_dynpro_dynpro_link = 5
     
  OTHERS    
     
     
     = 6.

    IF sy-subrc
<> 0.
     
MESSAGE s001(00) WITH '屏幕初始化失败'.
      LEAVE
LIST-PROCESSING.
    ENDIF.

*添加自定义工具条
    PERFORM
frm_set_alv_toolbar.
*
    CREATE OBJECT
g_alv_grid
     
EXPORTING
     
  i_parent = alv_ctner.

*构建显示字段样式
    PERFORM
frm_build_fieldcat.

    "Set/Reset Ready for
Input Status
    CALL METHOD
g_alv_grid->set_ready_for_input
     
EXPORTING
     
  i_ready_for_input = 1.

* layout 设定样式
    CLEAR ls_layout.
    ls_layout-cwidth_opt =
'X'.     "优化列宽

    CLEAR
l_disvariant.
    l_disvariant-report =
sy-repid. "当前程序

* event  绑定事件
    CREATE OBJECT
g_event.

    SET HANDLER
g_event->toolbar  
     
    FOR g_alv_grid.
    SET HANDLER
g_event->handle_data_changed FOR g_alv_grid.

*这里是下拉框相关逻辑…………………………………………

  DATA: lt_dropdown TYPE
lvc_t_drop,

     
ls_dropdown TYPE lvc_s_drop.


  "第一个下拉框:AAA字段
  ls_dropdown-handle = '1'.
     
     
     
   
   "指定下拉框句柄

  ls_dropdown-value = '1 春天'.
  APPEND ls_dropdown TO
lt_dropdown.


  ls_dropdown-handle = '1'.
  ls_dropdown-value = '2 夏天'.
  APPEND ls_dropdown TO
lt_dropdown.


  ls_dropdown-handle = '1'.
  ls_dropdown-value = '3 冬天'.
  APPEND ls_dropdown TO
lt_dropdown.


  "第二个下拉框:BBB字段

 
ls_dropdown-handle = '2'.    
     
     
     
   
 "指定下拉框句柄

 
ls_dropdown-value = '0 启用'.

  APPEND
ls_dropdown TO lt_dropdown.


 
ls_dropdown-handle = '2'.

 
ls_dropdown-value = '1 禁止'.

  APPEND
ls_dropdown TO lt_dropdown.


  CALL METHOD
g_alv_grid->set_drop_down_table  
   
 "调用alv类的下拉框方法

    EXPORTING
     
it_drop_down = lt_dropdown.


*end………………………………………………………………

*   "显示内表数据
    CALL METHOD
g_alv_grid->set_table_for_first_display
     
EXPORTING
     
  is_layout    
     
 = ls_layout
     
  is_variant    
      =
l_disvariant
     
  it_toolbar_excluding = gt_tools
     
CHANGING
     
  it_fieldcatalog  
   = it_fieldcatalog[]
     
  it_outtab    
     
 = g_it_show[].

如上即可

有时候有你会发现点保存的时候报错:
比如你有个状态字段,在库表里是char1类型的,
你下拉框里显示:0:启用  1:禁用

当你定义alv字段的时候,直接参考库表的char1类型
点保存的时候会提示:
“条目0 启用 过长  大于1”

这个时候,在定义alv子段的时候,不参考char1类型
而是定义成string

就可以了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: