您的位置:首页 > 其它

OO ALV 实现下拉框

2014-01-22 09:25 323 查看
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

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