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
就可以了
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
就可以了
相关文章推荐
- OO ALV 实现下拉框
- 实现三级联动下拉框&nbsp;下拉列表…
- OO ALV常用功能完整简例(热键单击…
- OO实现ALV(二)<转>
- OO实现ALV(一)<转>
- OO ALV 用户过滤数据后…
- ALV显示红绿灯(FM ALV 和 OO ALV两…
- OO实现ALV(三)<转>
- 实现ALV Grid 和A…
- 实现三级联动下拉框 下拉列表… 分类: Android开发 2014-05-30 10:57 67人阅读 评论(0) 收藏
- OO实现ALV(四)<转>
- 实现ALV Grid 和A…
- ALV显示红绿灯(FM ALV 和 OO ALV两…
- ios 禁止UIWebView下拉拖动效果
- 轻松实现SQL&nbsp;Server与Access…
- Java 实现缓存机制
- 实现下拉内容从数据库中动态读取--->Struts标签:和LabelValueBean的使用
- Unity&nbsp;利用协同程序实现场景…
- 上拉电阻&nbsp;下拉电阻的汇总
- C# WINFORM 某些控件实现联想输入…