第一次做,将遇到的问题记录一下,希望对你有所帮助,网上资料也很多,但是我自己做的时候依然遇到些问题,所以以下全是自己角度理解的。
1.输出函数要用LVC的,否则fieldcat无法设置句柄和字段名称,会提示参数不存在
DRDN_HNDL 自然数 下拉的句柄
DRDN_FIELD 内部表字段的字段名称 下拉的字段
2.输出函数中事件的设置
DATA: gt_event TYPE TABLE OF slis_alv_event,
gs_event TYPE slis_alv_event.
FORM creat_event_exits .
gs_event-name = 'CALLER_EXIT'. "事件名称
gs_event-form = 'CALLER_EXIT'. "FORM名称
APPEND gs_event TO gt_event.
ENDFORM.
既然设置了FORM名称,就不用再写PERFORM,输出函数会自己去调用的
FORM caller_exit USING ls_data TYPE slis_data_caller_exit.
DATA: l_ref_alv TYPE REF TO cl_gui_alv_grid.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = l_ref_alv.
CALL METHOD l_ref_alv->set_drop_down_table
EXPORTING
it_drop_down = gt_dropdown.
ENDFORM.
3. set_drop_down_table 下拉框item数据传入的一个方法
这个要定义一个很重要的类:cl_gui_alv_grid,关于ALV展示的很多方法都包含在这个类里面,之前有用过里面监控ALV更改的一个方法:check_changed_data
4.展示效果
5.代码展示
REPORT zlm014. TABLES: sflight. TYPES: BEGIN OF zty_sflight. INCLUDE STRUCTURE sflight. TYPES: drop_down TYPE int4, "自己加的字段,用于设置句柄字段名称 END OF zty_sflight. DATA: gt_sflight2 TYPE TABLE OF zty_sflight, gs_sflight2 TYPE zty_sflight. DATA: gs_layout TYPE lvc_s_layo, gt_fieldcat TYPE lvc_t_fcat, gs_fieldcat TYPE lvc_s_fcat. DATA: gt_event TYPE TABLE OF slis_alv_event, gs_event TYPE slis_alv_event. DATA: gs_alv TYPE REF TO cl_gui_alv_grid. DATA:gt_dropdown TYPE lvc_t_drop, gs_dropdown TYPE lvc_s_drop. SELECT * FROM sflight INTO CORRESPONDING FIELDS OF TABLE gt_sflight2. gs_layout-zebra = 'X'. gs_layout-cwidth_opt = 'X'. gs_fieldcat-tabname = 'SFLIGHT'. gs_fieldcat-fieldname = 'CARRID'. " 需要输出的内表的字段名 gs_fieldcat-scrtext_l = '航线代码'. " 字段的描述-长字段标签 gs_fieldcat-scrtext_m = '航线代码'. " 字段描述-中字段标签 gs_fieldcat-scrtext_s = '航线代码'. " 字段描述-短字段标签 gs_fieldcat-edit = 'X'. gs_fieldcat-drdn_field = 'DROP_DOWN'. gs_fieldcat-drdn_hndl = '1'. APPEND gs_fieldcat TO gt_fieldcat . CLEAR gs_fieldcat. gs_fieldcat-tabname = 'SFLIGHT'. gs_fieldcat-fieldname = 'CONNID'. " 需要输出的内表的字段名 gs_fieldcat-scrtext_l = '航班连接 Id'. " 字段的描述-长字段标签 gs_fieldcat-scrtext_m = '航班连接 Id'. " 字段描述-中字段标签 gs_fieldcat-scrtext_s = '航班连接 Id'. " 字段描述-短字段标签 APPEND gs_fieldcat TO gt_fieldcat . CLEAR gs_fieldcat. gs_fieldcat-tabname = 'SFLIGHT'. gs_fieldcat-fieldname = 'FLDATE'. " 需要输出的内表的字段名 gs_fieldcat-scrtext_l = '航班日期'. " 字段的描述-长字段标签 gs_fieldcat-scrtext_m = '航班日期'. " 字段描述-中字段标签 gs_fieldcat-scrtext_s = '航班日期'. " 字段描述-短字段标签 APPEND gs_fieldcat TO gt_fieldcat . CLEAR gs_fieldcat. gs_fieldcat-tabname = 'SFLIGHT'. gs_fieldcat-fieldname = 'PRICE'. " 需要输出的内表的字段名 gs_fieldcat-scrtext_l = '航空运费'. " 字段的描述-长字段标签 gs_fieldcat-scrtext_m = '航空运费'. " 字段描述-中字段标签 gs_fieldcat-scrtext_s = '航空运费'. " 字段描述-短字段标签 APPEND gs_fieldcat TO gt_fieldcat . CLEAR gs_fieldcat. PERFORM set_drdn_table. PERFORM creat_event_exits. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING i_callback_program = sy-repid i_callback_pf_status_set = 'FRM_SET_STATUS' is_layout_lvc = gs_layout it_fieldcat_lvc = gt_fieldcat it_events = gt_event TABLES t_outtab = gt_sflight2 EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc <> 0. * Implement suitable error handling here ENDIF. *激活自定义状态栏 FORM frm_set_status USING rt_extab TYPE slis_t_extab. CLEAR: rt_extab. REFRESH: rt_extab. SET PF-STATUS '9001' EXCLUDING rt_extab. ENDFORM. "FRM_SET_STATUS *&---------------------------------------------------------------------* *& Form SET_DRDN_TABLE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM set_drdn_table . CLEAR gs_dropdown. gs_dropdown-handle = '1'. gs_dropdown-value = 'AA'. APPEND gs_dropdown TO gt_dropdown. CLEAR gs_dropdown. gs_dropdown-handle = '1'. gs_dropdown-value = 'BB'. APPEND gs_dropdown TO gt_dropdown. ENDFORM. *&---------------------------------------------------------------------* *& Form CREAT_EVENT_EXITS *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM creat_event_exits . gs_event-name = 'CALLER_EXIT'. "事件名称 gs_event-form = 'CALLER_EXIT'. "FORM名称 APPEND gs_event TO gt_event. ENDFORM. FORM caller_exit USING ls_data TYPE slis_data_caller_exit. DATA: l_ref_alv TYPE REF TO cl_gui_alv_grid. CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTING e_grid = l_ref_alv. CALL METHOD l_ref_alv->set_drop_down_table EXPORTING it_drop_down = gt_dropdown. ENDFORM. |