ABAP-ALV监听修改事件程序例子

复制代码
  1 REPORT y4_b4_test4.
  2 
  3 TABLES:mara .
  4 
  5 TYPES:BEGIN OF ty_data,
  6         checkbox TYPE char1,
  7         style    TYPE   lvc_t_styl,
  8         num      TYPE i.
  9         INCLUDE TYPE mara.
 10 TYPES: END OF ty_data.
 11 
 12 DATA:gt_data TYPE TABLE OF ty_data,
 13      gs_data TYPE ty_data.
 14 
 15 DATA:gt_fieldcat TYPE lvc_t_fcat, "字段目录
 16      gs_fieldcat TYPE lvc_s_fcat,  "字段目录
 17      gs_layout   TYPE lvc_s_layo.  "布局结构
 18 
 19 ************************************************事件定义
 20 
 21 DATA: ls_edit TYPE lvc_s_styl.
 22 
 23 DATA:gt_event   TYPE slis_t_event,
 24      gs_event   LIKE LINE OF gt_event,
 25      gs_variant TYPE disvariant.                                    "格式
 26 
 27 DATA: gv_grid TYPE REF TO cl_gui_alv_grid.
 28 
 29 CLASS lcl_event_receiver DEFINITION.
 30   PUBLIC SECTION.
 31     METHODS:
 32       handle_data_changed FOR EVENT data_changed_finished OF cl_gui_alv_grid
 33         IMPORTING e_modified et_good_cells.
 34 ENDCLASS.
 35 
 36 CLASS lcl_event_receiver IMPLEMENTATION.
 37   METHOD handle_data_changed.
 38     PERFORM frm_data_changed USING et_good_cells.
 39   ENDMETHOD.
 40 ENDCLASS.
 41 
 42 DATA: gv_event_receiver TYPE REF TO lcl_event_receiver.
 43 
 44 FIELD-SYMBOLS: <fs_data>  LIKE gs_data,
 45                <fs_event> TYPE ty_data.
 46 
 47 ***************************************************************
 48 
 49 SELECTION-SCREEN BEGIN OF BLOCK bk1 WITH FRAME TITLE TEXT-001.
 50 
 51   SELECT-OPTIONS s_matnr FOR mara-matnr .  "物料
 52 
 53 SELECTION-SCREEN END OF BLOCK bk1.
 54 
 55 START-OF-SELECTION.
 56   PERFORM frm_layout.
 57   PERFORM frm_set_event."监听事件
 58   PERFORM frm_fieldcat CHANGING gt_fieldcat .    "获取字段
 59   PERFORM frm_getdata.
 60 
 61 END-OF-SELECTION.
 62   PERFORM frm_display.
 63 
 64 FORM frm_getdata .
 65 
 66   SELECT *
 67     INTO CORRESPONDING FIELDS OF TABLE gt_data
 68     FROM mara
 69     WHERE matnr IN s_matnr .
 70 
 71 ENDFORM .
 72 
 73 FORM frm_num .
 74 
 75   IF <fs_event>-num > 20 .
 76 
 77     <fs_event>-checkbox = 'X' .
 78 
 79   ELSE .
 80 
 81     <fs_event>-checkbox = '' .
 82 
 83   ENDIF .
 84 
 85   IF <fs_event>-num = 10 .
 86 
 87     CLEAR ls_edit.
 88     ls_edit-fieldname = 'CHECKBOX'.
 89     ls_edit-style = cl_gui_alv_grid=>mc_style_disabled.
 90     INSERT ls_edit INTO TABLE <fs_event>-style.
 91 
 92   ELSEIF <fs_event>-num = 20 .
 93 
 94     CLEAR <fs_event>-style .
 95 
 96   ENDIF .
 97 
 98 ENDFORM .
 99 
100 FORM frm_data_changed USING et_good_cells TYPE lvc_t_modi.
101 
102   DATA: ls_mod_data TYPE lvc_s_modi.
103   DATA: stbl1 TYPE lvc_s_stbl.
104   LOOP AT et_good_cells INTO ls_mod_data.
105     READ TABLE gt_data ASSIGNING <fs_event> INDEX ls_mod_data-row_id.
106     CASE ls_mod_data-fieldname.
107       WHEN 'NUM'.
108         PERFORM frm_num .
109     ENDCASE.
110 
111     stbl1-row = 'X'.
112     stbl1-col = 'X'.
113     CALL METHOD gv_grid->refresh_table_display
114       EXPORTING
115         is_stable = stbl1.
116 
117   ENDLOOP.
118 
119 ENDFORM.
120 
121 FORM frm_set_event.
122 
123   gs_event-name = 'CALLER_EXIT'.
124   gs_event-form = 'FRM_BUTTON'.
125   APPEND gs_event TO gt_event.
126 
127 ENDFORM.
128 
129 FORM frm_button USING e_grid TYPE slis_data_caller_exit .
130 
131   CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
132     IMPORTING
133       e_grid = gv_grid.
134   CALL METHOD gv_grid->set_ready_for_input
135     EXPORTING
136       i_ready_for_input = 1.
137   CALL METHOD gv_grid->check_changed_data.
138   "光标移动事件
139   CALL METHOD gv_grid->register_edit_event
140     EXPORTING
141       i_event_id = cl_gui_alv_grid=>mc_evt_modified
142     EXCEPTIONS
143       error      = 1
144       OTHERS     = 2.
145   "设置ENTER事件
146   CALL METHOD gv_grid->register_edit_event
147     EXPORTING
148       i_event_id = cl_gui_alv_grid=>mc_evt_enter
149     EXCEPTIONS
150       error      = 1
151       OTHERS     = 2.
152   "数据修改事件
153   CREATE OBJECT gv_event_receiver.
154   SET HANDLER gv_event_receiver->handle_data_changed FOR gv_grid.
155 
156 ENDFORM.
157 
158 FORM frm_layout.
159 
160   CLEAR gs_layout.
161   gs_layout-zebra      = 'X'.     "斑马线显示
162   gs_layout-cwidth_opt = 'X'.     "自适应宽度
163   gs_layout-sel_mode   = 'A'.     "选择模式:多选/单选
164   gs_layout-stylefname = 'STYLE'.
165 
166 ENDFORM.
167 
168 FORM frm_display.
169   gs_variant-report = sy-repid.
170   gs_variant-handle = 1.
171   CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' "调用函数
172     EXPORTING
173       i_callback_program       = sy-repid
174       is_layout_lvc            = gs_layout "布局
175       it_fieldcat_lvc          = gt_fieldcat "字段
176 *      i_callback_pf_status_set = 'SET_PF_STATUS' "按钮
177 *      i_callback_user_command  = 'ALV_USER_COMMAND' "按钮事件
178       i_save                   = 'A'
179       it_events                = gt_event
180       is_variant               = gs_variant
181     TABLES
182       t_outtab                 = gt_data "数据
183     EXCEPTIONS "抛出异常
184       program_error            = 1
185       OTHERS                   = 2.
186 ENDFORM.
187 
188 FORM frm_fieldcat CHANGING VALUE(ot_fieldcat) TYPE lvc_t_fcat.
189 
190   DATA:l_pos       TYPE i VALUE 2,
191        ls_fieldcat TYPE lvc_s_fcat.
192   DEFINE alv_append_field.
193     CLEAR ls_fieldcat.
194     ls_fieldcat-col_pos = l_pos.
195     ls_fieldcat-fieldname = &1 .
196     ls_fieldcat-reptext = &2 .
197     ls_fieldcat-no_zero = &3.
198     ls_fieldcat-key = &4 .        "状态灯
199     ls_fieldcat-scrtext_l = &2.
200     ls_fieldcat-scrtext_m = &2.
201     ls_fieldcat-scrtext_s = &2.
202     ls_fieldcat-edit = &5.
203     ls_fieldcat-ref_table = &6.
204     ls_fieldcat-ref_field = &7.
205     ls_fieldcat-outputlen = &8 .
206     APPEND ls_fieldcat TO ot_fieldcat.
207     l_pos = l_pos + 1 .
208   END-OF-DEFINITION.
209   REFRESH ot_fieldcat.
210 
211   CLEAR gs_fieldcat.
212   ls_fieldcat-fieldname = 'CHECKBOX'."多选框字段名
213   ls_fieldcat-reptext = '选项'."文本
214   ls_fieldcat-edit      = 'X'."能够修改
215   ls_fieldcat-checkbox  = 'X'. "多选框
216   ls_fieldcat-intlen = 1.
217   APPEND ls_fieldcat TO ot_fieldcat.
218 
219   alv_append_field 'NUM' '状态' 'X' '' 'X' '' '' ''.
220   alv_append_field 'MATNR' '物料' 'X' '' '' '' '' ''.
221   alv_append_field 'MTART' '物料类型' 'X' '' '' '' '' ''.
222   alv_append_field 'MBRSH' '行业领域' 'X' '' '' '' '' ''.
223   alv_append_field 'MATKL' '物料组' 'X' '' '' '' '' ''.
224 
225 ENDFORM.
复制代码
posted @   TigerMan  阅读(407)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示