ooalv自定义按钮、单击、双击、列编辑切换的事件用法

时间:2024-05-22 19:56:53
1、需新建屏幕1001 并画container:'CONT1'
2、需新建屏幕1002 并画container:'CONT2'
3、定义屏幕1001、1002的ok_code和逻辑流
4、定义工具栏
ooalv自定义按钮、单击、双击、列编辑切换的事件用法 

程序代码:
  1. TABLES t001w.

  2. TYPES:BEGIN OF typ_t001w ,
  3.      werks  TYPE t001w-werks,
  4.      name1  TYPE t001w-name1,
  5.      werks2 TYPE t001w-werks,
  6.   rowcolor  TYPE char10,
  7.   zcheckbox TYPE c,       "LAYOUT-CHECBOX   =  'ZCHECKBOX'.
  8. *  zflag     TYPE c,      "LAYOUT-BOX_FNAME = 'ZFLAG'.
  9.   zicon     TYPE char10, "LAYOUT-ICON      = 'ZICON'  图标需要显示的
  10.      END OF typ_t001w.

  11. TYPES:BEGIN OF typ_smf ,
  12.      werks  TYPE t001w-werks,
  13.      name1  TYPE t001w-name1,
  14.      END OF typ_smf.

  15. DATA:i_t001w  TYPE TABLE OF typ_t001w,"""""第一次ALV内表
  16.      i_detail TYPE TABLE OF typ_smf, """""单击ALV内表列ZICON显示的明细ALV内表
  17.      i_smf    TYPE TABLE OF typ_smf.""""SF内表

  18. DATA:fieldcat TYPE lvc_t_fcat,
  19.      grid TYPE REF TO cl_gui_alv_grid,  "alv控件名
  20.      grid2 TYPE REF TO cl_gui_alv_grid,  "alv控件名
  21.      g_container TYPE scrfname VALUE 'CONT1',"重新定义本地容器对象名
  22.      g_container2 TYPE scrfname VALUE 'CONT2',"重新定义本地容器对象名
  23.      is_layout TYPE lvc_s_layo,
  24.      ps_layout TYPE lvc_s_layo,
  25.      g_custom_container TYPE REF TO cl_gui_custom_container,
  26.      g_custom_container2 TYPE REF TO cl_gui_custom_container.

  27. DATA: ui_functions TYPE ui_functions. "隐藏按钮的内表
  28. *********ALV上事件捕捉类
  29. DATA:gs_toolbar TYPE stb_button.             "按钮
  30. CLASS alv_event_receiver DEFINITION DEFERRED. "声明类对象
  31. *----------------------------------------------------------------------*
  32. *       CLASS alv_event_receiver DEFINITION
  33. *----------------------------------------------------------------------*
  34. *
  35. *----------------------------------------------------------------------*
  36. CLASS alv_event_receiver DEFINITION.                  "声明类成员可见性
  37.   PUBLIC SECTION.                                      "定义相关类成员可以被程序中的所有对象调用
  38.     CLASS-METHODS:                                     "静态方法
  39.       handle_toolbar                                   "初始化工具栏对象事件,如增加按钮并设定其属性
  40.         FOR EVENT toolbar OF cl_gui_alv_grid
  41.           IMPORTING e_object e_interactive,

  42.        handle_menu_button                              "用于在下拉菜单中增加选项
  43.          FOR EVENT menu_button OF cl_gui_alv_grid
  44.           IMPORTING e_object e_ucomm,

  45.        handle_user_command                             "工具栏中的按钮的单击事件
  46.           FOR EVENT user_command OF cl_gui_alv_grid
  47.             IMPORTING e_ucomm,

  48.        handle_hotspot_click
  49.           FOR EVENT hotspot_click OF cl_gui_alv_grid    "屏幕中的单击事件,可以具体到某行某列,需要设置热点
  50.             IMPORTING  e_row_id e_column_id es_row_no,

  51.        handle_double_click
  52.           FOR EVENT double_click OF cl_gui_alv_grid     "屏幕中的双击事件,可以具体到某行某列,即使设置热点也必须双击
  53.             IMPORTING e_row e_column es_row_no.
  54. ENDCLASS.                    "alv_event_receiver DEFINITION
  55. *&---------------------------------------------------------------------*
  56. *&       Class (Implementation)  alv_event_receiver
  57. *&---------------------------------------------------------------------*
  58. *        Text
  59. *----------------------------------------------------------------------*
  60. CLASS alv_event_receiver IMPLEMENTATION.  "实现类方法
  61.   METHOD handle_toolbar.
  62.     gs_toolbar-function =  'B_SUM'.       "为按钮分配功能码
  63.     gs_toolbar-icon     =  icon_display.  "为按钮分配图标
  64.     gs_toolbar-text     =  '总行数'.      "为按钮分配文本
  65.     gs_toolbar-butn_type = '0'.           "定义按钮类型,不填时默认为0
  66.     APPEND gs_toolbar TO e_object->mt_toolbar. "添加按钮到工具栏

  67.     gs_toolbar-function =  'B_PRINT'.       "为按钮分配功能码
  68.     gs_toolbar-icon     =  icon_import.  "为按钮分配图标
  69.     gs_toolbar-text     =  '转储订单打印'.      "为按钮分配文本
  70.     gs_toolbar-checked  = 'X'.
  71.     gs_toolbar-butn_type = '0'.           "定义按钮类型,不填时默认为0
  72.     APPEND gs_toolbar TO e_object->mt_toolbar. "添加按钮到工具栏

  73.     gs_toolbar-function =  'B_LIST'.      "为按钮分配功能码
  74.     gs_toolbar-quickinfo = '自定义下拉菜单'.
  75.     gs_toolbar-icon     =  icon_biw_report_view.  "为按钮分配图标
  76.     gs_toolbar-text     =  '下拉菜单'.      "为按钮分配文本
  77.     gs_toolbar-butn_type = '1'.           "定义按钮类型
  78.     APPEND gs_toolbar TO e_object->mt_toolbar. "添加按钮到工具栏

  79.     gs_toolbar-function =  'B_EDIT'.       "为按钮分配功能码
  80.     gs_toolbar-icon     =  icon_change.  "为按钮分配图标
  81.     gs_toolbar-text     =  '切换编辑状态'.      "为按钮分配文本
  82.     gs_toolbar-checked  = 'X'.
  83.     gs_toolbar-butn_type = '0'.           "定义按钮类型,不填时默认为0
  84.     APPEND gs_toolbar TO e_object->mt_toolbar. "添加按钮到工具栏
  85.   ENDMETHOD.                    "handle_toolbar
  86.   METHOD handle_menu_button.
  87.     IF e_ucomm = 'B_LIST'.
  88.       CALL METHOD e_object->add_function
  89.         EXPORTING
  90.           icon  = icon_display
  91.           fcode = 'B_SUM'
  92.           text  = '显示ALV总数'.
  93.     ENDIF.
  94.   ENDMETHOD.                    "handle_menu_button
  95.   METHOD handle_user_command.
  96.     DATA sum TYPE i.
  97.     DATA text TYPE string.
  98.     DATA: lwa_t001w LIKE LINE OF i_t001w.
  99.     DATA: lwa_smf   LIKE LINE OF i_smf.

  100.     CASE e_ucomm.
  101.       WHEN  'B_SUM'.
  102.         DESCRIBE TABLE i_t001w[] LINES sum.
  103.         text = sum.
  104.         CONCATENATE  '当前表格中数据的总行数:' text  INTO text.
  105.         MESSAGE  text  TYPE 'I'. "为何消息类型为 E 时运行时显示A类型,异常终止到初始界面
  106.       WHEN 'B_PRINT'.
  107.         LOOP AT i_t001w  INTO lwa_t001w WHERE  zcheckbox = 'X'.
  108.           lwa_smf-werks = lwa_t001w-werks.
  109.           lwa_smf-name1 = lwa_t001w-name1.
  110.           APPEND  lwa_smf TO i_smf.
  111.           CLEAR :lwa_t001w,lwa_smf.
  112.         ENDLOOP.
  113.         IF i_smf[] IS INITIAL.
  114.           MESSAGE '请至少选择一行数据区打印!' TYPE 'E'. "E类型消息会转化为A类型,很蛋疼,求破!
  115.         ELSE.
  116.           PERFORM frm_print_data.  "这个没具体写。
  117.         ENDIF.
  118.       WHEN 'B_EDIT'.
  119.         IF grid->is_ready_for_input( ) EQ 0.
  120.           CALL METHOD grid->set_ready_for_input
  121.             EXPORTING
  122.               i_ready_for_input = 1.
  123.         ELSE.
  124.           CALL METHOD grid->set_ready_for_input
  125.             EXPORTING
  126.               i_ready_for_input = 0.
  127.         ENDIF.
  128.       WHEN OTHERS.
  129.     ENDCASE.
  130.   ENDMETHOD.                    "handle_user_command
  131.   "ALV内表展示处单击事件捕捉,需要设置热点对单击列字段
  132.   METHOD handle_hotspot_click.
  133.     DATA:lwa_t001w LIKE LINE OF  i_t001w.
  134.     READ TABLE i_t001w INTO lwa_t001w INDEX es_row_no-row_id. "判断行号
  135.     CASE e_column_id-fieldname . "判断列名
  136.       WHEN 'NAME1'.
  137.         CALL TRANSACTION 'ME51N' AND SKIP FIRST SCREEN. "随便写的
  138.       WHEN 'ZICON'.         "
  139.         SELECT werks
  140.                name1
  141.           INTO TABLE i_detail
  142.           FROM t001w
  143.           WHERE werks = lwa_t001w-werks2.
  144.         CLEAR lwa_t001w.
  145.         IF sy-subrc NE 0.
  146.           MESSAGE  'No result finding!' TYPE 'I'.
  147.         ELSE.
  148.           CALL SCREEN 1002.
  149.         ENDIF.
  150.       WHEN OTHERS.
  151.     ENDCASE.
  152. *    MESSAGE i001(00) WITH '当前行:' es_row_no-row_id ',航线代码:' ls_lt001w-werks.
  153.   ENDMETHOD.                    "handle_hotspot_click
  154.   "ALV内表展示处双击击事件捕捉,如果设置热点双击不起作用
  155.   METHOD handle_double_click.
  156.     DATA:lwa_t001w LIKE LINE OF i_t001w.
  157.     READ TABLE i_t001w INTO lwa_t001w INDEX es_row_no-row_id.
  158.     IF e_column-fieldname = 'WERKS'.
  159.       SET PARAMETER ID 'AUN' FIELD lwa_t001w-werks.
  160.       CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
  161.     ENDIF.
  162.   ENDMETHOD.                    "handle_double_click

  163. ENDCLASS.               "alv_event_receiver
  164. START-OF-SELECTION.
  165.   CALL SCREEN 1001.

  166. *&---------------------------------------------------------------------*
  167. *&      Module  STATUS_1001  OUTPUT
  168. *&---------------------------------------------------------------------*
  169. *       text
  170. *----------------------------------------------------------------------*
  171. MODULE status_1001 OUTPUT.
  172.   SET PF-STATUS 'T001'.
  173. *  SET TITLEBAR 'xxx'.
  174. ENDMODULE.                 " STATUS_1001  OUTPUT
  175. *&---------------------------------------------------------------------*
  176. *&      Module  USER_COMMAND_1001  INPUT
  177. *&---------------------------------------------------------------------*
  178. *       text
  179. *----------------------------------------------------------------------*
  180. MODULE user_command_1001 INPUT.
  181.   FIELD-SYMBOLS <field> TYPE typ_t001w .
  182.   DATA: i TYPE i VALUE 0.
  183.   DATA ok_code TYPE sy-ucomm.
  184.   ok_code = sy-ucomm.
  185.   CLEAR sy-ucomm.

  186.   CASE ok_code.
  187.     WHEN 'BACK'.
  188.       LEAVE TO SCREEN 0.
  189.     WHEN 'EDIT'.
  190.       IF grid->is_ready_for_input( ) EQ 0.
  191.         CALL METHOD grid->set_ready_for_input
  192.           EXPORTING
  193.             i_ready_for_input = 1.
  194.       ELSE.
  195.         CALL METHOD grid->set_ready_for_input
  196.           EXPORTING
  197.             i_ready_for_input = 0.
  198.       ENDIF.
  199.     WHEN 'EXECU'.
  200.       SELECT * FROM t001w
  201.          INTO CORRESPONDING FIELDS OF TABLE i_t001w.
  202.       LOOP AT  i_t001w  ASSIGNING <field>  .
  203.         <field>-werks2 = <field>-werks.
  204.         <field>-zicon  = '@[email protected]'.  "图标
  205.       ENDLOOP.

  206.       IF g_custom_container IS INITIAL.
  207.         PERFORM exclude_tb_functions CHANGING ui_functions. "隐藏某些按钮
  208.         PERFORM frm_layout_set.
  209.         PERFORM frm_fieldcat_set.
  210.         PERFORM alv_show.
  211.       ELSE.
  212.         CALL METHOD grid->refresh_table_display. "刷新
  213.       ENDIF.
  214.     WHEN OTHERS.
  215.   ENDCASE.
  216. ENDMODULE.                 " USER_COMMAND_1001  INPUT
  217. *&---------------------------------------------------------------------*
  218. *&      Form  ALV_SHOW
  219. *&---------------------------------------------------------------------*
  220. *       text
  221. *----------------------------------------------------------------------*
  222. *  -->  p1        text
  223. *  <--  p2        text
  224. *----------------------------------------------------------------------*
  225. FORM alv_show .
  226.   CREATE OBJECT g_custom_container                        "创建容器对象
  227.         EXPORTING container_name = g_container.
  228.   CREATE OBJECT grid                                      "创建ALV对象
  229.         EXPORTING i_parent = g_custom_container.
  230.   CALL METHOD grid->register_edit_event                   "可编辑回传方法
  231.     EXPORTING
  232.       i_event_id = grid->mc_evt_modified.
  233.   CALL METHOD grid->set_table_for_first_display
  234.     EXPORTING
  235. *     I_BUFFER_ACTIVE      =
  236. *     I_BYPASSING_BUFFER   =
  237. *     I_CONSISTENCY_CHECK  =
  238. *     I_STRUCTURE_NAME     = 'T001W'
  239. *     IS_VARIANT           =
  240.       i_save               = 'X'
  241. *     I_DEFAULT            = 'X'
  242.       is_layout            = is_layout
  243. *     IS_PRINT             =
  244. *     IT_SPECIAL_GROUPS    =
  245.       it_toolbar_excluding = ui_functions[]
  246. *     IT_HYPERLINK         =
  247. *     IT_ALV_GRAPHICS      =
  248. *     IT_EXCEPT_QINFO      =
  249. *     IR_SALV_ADAPTER      =
  250.     CHANGING
  251.       it_outtab            = i_t001w[]
  252.       it_fieldcatalog      = fieldcat[].
  253. *           IT_SORT                       =
  254. *           IT_FILTER                     =
  255. *         EXCEPTIONS
  256. *           INVALID_PARAMETER_COMBINATION = 1
  257. *           PROGRAM_ERROR                 = 2
  258. *           TOO_MANY_LINES                = 3
  259. *           others                        = 4
  260.   .

  261. ******注册ALV中引用的事件
  262.   SET HANDLER alv_event_receiver=>handle_toolbar
  263.               alv_event_receiver=>handle_menu_button
  264.               alv_event_receiver=>handle_user_command
  265.               alv_event_receiver=>handle_hotspot_click
  266.               alv_event_receiver=>handle_double_click
  267.            FOR ALL INSTANCES.
  268. ****调用方法**自定义工具对象
  269.   CALL METHOD grid->set_toolbar_interactive.
  270. ENDFORM.                    " ALV_SHOW

  271. *&---------------------------------------------------------------------*
  272. *&      Form  exclude_tb_functions
  273. *&---------------------------------------------------------------------*
  274. *       text
  275. *----------------------------------------------------------------------*
  276. *      -->PT_EXCLUDE text
  277. *----------------------------------------------------------------------*
  278. FORM exclude_tb_functions CHANGING pt_exclude TYPE ui_functions .
  279.   DATA ls_exclude TYPE ui_func.
  280.   ls_exclude = cl_gui_alv_grid=>mc_fc_filter . "过滤器
  281.   APPEND ls_exclude TO pt_exclude.
  282.   ls_exclude = cl_gui_alv_grid=>mc_fc_current_variant . "布局更改
  283.   APPEND ls_exclude TO pt_exclude.
  284.   ls_exclude = cl_gui_alv_grid=>mc_fc_average ."平均值
  285.   APPEND ls_exclude TO pt_exclude.
  286.   ls_exclude = cl_gui_alv_grid=>mc_mb_sum ."求和
  287.   APPEND ls_exclude TO pt_exclude.
  288.   ls_exclude = cl_gui_alv_grid=>mc_mb_export .   "导出
  289.   APPEND ls_exclude TO pt_exclude.
  290.   ls_exclude = cl_gui_alv_grid=>mc_fc_loc_cut .        "剪切
  291.   APPEND ls_exclude TO pt_exclude.
  292.   ls_exclude = cl_gui_alv_grid=>mc_fc_loc_delete_row . "删除行
  293.   APPEND ls_exclude TO pt_exclude.
  294.   ls_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row . "插入行
  295.   APPEND ls_exclude TO pt_exclude.
  296.   ls_exclude = cl_gui_alv_grid=>mc_fc_refresh .  "刷新
  297.   APPEND ls_exclude TO pt_exclude.
  298.   ls_exclude = cl_gui_alv_grid=>mc_fc_find ."查找
  299.   APPEND ls_exclude TO pt_exclude.
  300.   ls_exclude = cl_gui_alv_grid=>mc_fc_sort_asc .  "升序排列
  301.   APPEND ls_exclude TO pt_exclude.
  302.   ls_exclude = cl_gui_alv_grid=>mc_fc_sort_dsc .  "降序排列
  303.   APPEND ls_exclude TO pt_exclude.
  304.   ls_exclude = cl_gui_alv_grid=>mc_fc_views .   "视图
  305.   APPEND ls_exclude TO pt_exclude.
  306.   ls_exclude = cl_gui_alv_grid=>mc_fc_print ."打印
  307.   APPEND ls_exclude TO pt_exclude.
  308.   ls_exclude = cl_gui_alv_grid=>mc_fc_detail . "详细按钮
  309.   APPEND ls_exclude TO pt_exclude.
  310.   ls_exclude = cl_gui_alv_grid=>mc_fc_graph . "显示图形
  311.   APPEND ls_exclude TO pt_exclude.
  312.   ls_exclude = cl_gui_alv_grid=>mc_fc_info . "最终用户文档
  313.   APPEND ls_exclude TO pt_exclude.
  314.   ls_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row . "附加行
  315.   APPEND ls_exclude TO pt_exclude.
  316.   ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row . "复制行
  317.   APPEND ls_exclude TO pt_exclude.
  318.   ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy . "复制文本
  319.   APPEND ls_exclude TO pt_exclude.
  320.   ls_exclude = cl_gui_alv_grid=>mc_fc_loc_undo . "撤消
  321.   APPEND ls_exclude TO pt_exclude.
  322. ENDFORM .                    "exclude_tb_functions
  323. *&---------------------------------------------------------------------*
  324. *&      Form  FRM_LAYOUT_SET
  325. *&---------------------------------------------------------------------*
  326. *       text
  327. *----------------------------------------------------------------------*
  328. *  -->  p1        text
  329. *  <--  p2        text
  330. *----------------------------------------------------------------------*
  331. FORM frm_layout_set .
  332.   is_layout-zebra = 'X' .
  333.   is_layout-grid_title = '仓储转储订单跟踪及打印' .
  334.   is_layout-smalltitle = 'X' .  "ALV 控制: 标题大小
  335.   is_layout-cwidth_opt = 'X' . "优化列宽
  336. *   is_layout-no_toolbar = 'X' . "隐藏按钮
  337.   is_layout-sel_mode = 'A' . "flag选择方式 A:行和列的选择,无法选择单元格  多行,多列  B
  338.   is_layout-info_fname = 'ROWCOLOR'.
  339. ENDFORM.                    " FRM_LAYOUT_SET
  340. *&---------------------------------------------------------------------*
  341. *&      Form  FRM_FIELDCAT_SET
  342. *&---------------------------------------------------------------------*
  343. *       text
  344. *----------------------------------------------------------------------*
  345. *  -->  p1        text
  346. *  <--  p2        text
  347. *----------------------------------------------------------------------*
  348. FORM frm_fieldcat_set .
  349.   DATA ls_fcat TYPE lvc_s_fcat .
  350.   CLEAR ls_fcat .
  351.   ls_fcat-fieldname = 'ZCHECKBOX' .
  352.   ls_fcat-coltext = '选择'.
  353. *  ls_fcat-emphasize = 'C601' ."列颜色控制
  354.   ls_fcat-checkbox   = 'X'.
  355.   ls_fcat-edit       = 'X'.
  356.   APPEND ls_fcat TO fieldcat .

  357.   CLEAR ls_fcat .
  358.   ls_fcat-fieldname = 'WERKS' .
  359.   ls_fcat-inttype = 'C' .
  360.   ls_fcat-outputlen = '4' .
  361.   ls_fcat-coltext = '工厂'."Carrier ID.列标题
  362.   ls_fcat-seltext = 'AAA' ."ALV 控制: 对话功能的列标识符
  363.   ls_fcat-emphasize = 'C601' ."列颜色控制
  364. *  ls_fcat-hotspot   = 'X'.  “不能设置hotspot  否则double click事件无效
  365.   APPEND ls_fcat TO fieldcat .

  366.   CLEAR ls_fcat .
  367.   ls_fcat-fieldname = 'NAME1' .
  368.   ls_fcat-ref_table = 'T001W' .
  369.   ls_fcat-ref_field = 'NAME1' .
  370.   ls_fcat-outputlen = '30' .
  371.   ls_fcat-coltext = '工厂名称' .
  372.   ls_fcat-hotspot   = 'X'.
  373.   APPEND ls_fcat TO fieldcat .

  374.   CLEAR ls_fcat .
  375.   ls_fcat-fieldname = 'WERKS2' .
  376.   ls_fcat-inttype = 'C' .
  377.   ls_fcat-outputlen = '4' .
  378.   ls_fcat-coltext = '工厂2号'."Carrier ID.列标题
  379.   ls_fcat-seltext = 'AAA' ."ALV 控制: 对话功能的列标识符
  380.   ls_fcat-emphasize = 'C601' ."列颜色控制
  381.   ls_fcat-edit    = 'X'.
  382.   APPEND ls_fcat TO fieldcat .

  383.   CLEAR ls_fcat .
  384.   ls_fcat-fieldname = 'ZICON' .
  385.   ls_fcat-coltext = '交货明细凭证'."Carrier ID.列标题
  386.   ls_fcat-seltext = 'AAA' ."ALV 控制: 对话功能的列标识符
  387.   ls_fcat-icon    = 'X'.
  388.   ls_fcat-hotspot   = 'X'.
  389.   APPEND ls_fcat TO fieldcat .
  390.   CLEAR ls_fcat .
  391. ENDFORM.                    " FRM_FIELDCAT_SET
  392. *&---------------------------------------------------------------------*
  393. *&      Form  FRM_PRINT_DATA
  394. *&---------------------------------------------------------------------*
  395. *       text
  396. *----------------------------------------------------------------------*
  397. *  -->  p1        text
  398. *  <--  p2        text
  399. *----------------------------------------------------------------------*
  400. FORM frm_print_data .

  401. ENDFORM.                    " FRM_PRINT_DATA
  402. *&---------------------------------------------------------------------*
  403. *&      Module  STATUS_1002  OUTPUT
  404. *&---------------------------------------------------------------------*
  405. *       text
  406. *----------------------------------------------------------------------*
  407. MODULE status_1002 OUTPUT.
  408.   SET PF-STATUS 'T001'.
  409. *  SET TITLEBAR 'xxx'.
  410.   PERFORM  frm_alv_show_detail.
  411. ENDMODULE.                 " STATUS_1002  OUTPUT
  412. *&---------------------------------------------------------------------*
  413. *&      Form  FRM_ALV_SHOW_DETAIL
  414. *&---------------------------------------------------------------------*
  415. *       text
  416. *----------------------------------------------------------------------*
  417. *  -->  p1        text
  418. *  <--  p2        text
  419. *----------------------------------------------------------------------*
  420. FORM frm_alv_show_detail .
  421.   DATA: ls_fcat  TYPE lvc_s_fcat ,
  422.        fieldcat2 TYPE lvc_t_fcat.
  423.   ls_fcat-fieldname = 'WERKS' .
  424.   ls_fcat-coltext = '工厂'."Carrier ID.列标题
  425.   APPEND ls_fcat TO fieldcat2 .
  426.   CLEAR ls_fcat .
  427.   ls_fcat-fieldname = 'NAME1' .
  428.   ls_fcat-coltext = '工厂名称'.
  429.   APPEND ls_fcat TO fieldcat2 .
  430.   CLEAR ls_fcat .

  431.   ps_layout-zebra = 'X' .
  432.   ps_layout-grid_title = '交货明细凭证' .
  433.   ps_layout-smalltitle = 'X' .  "ALV 控制: 标题大小
  434.   ps_layout-cwidth_opt = 'X' . "优化列宽
  435.   ps_layout-no_toolbar = 'X' . "隐藏按钮
  436. *  ps_layout-SEL_MODE = 'A' . "flag选择方式 A:行和列的选择,无法选择单元格  多行,多列  B
  437. *  ps_layout-info_fname = 'ROWCOLOR'.

  438.   IF g_custom_container2 IS INITIAL.
  439.     CREATE OBJECT g_custom_container2                        "创建容器对象
  440.      EXPORTING container_name = g_container2.
  441.     CREATE OBJECT grid2                                      "创建ALV对象
  442.      EXPORTING i_parent = g_custom_container2.
  443.   ELSE.
  444.     CALL METHOD grid2->refresh_table_display. "刷新
  445.   ENDIF.
  446.   CALL METHOD grid2->set_table_for_first_display
  447.     EXPORTING
  448. *     I_BUFFER_ACTIVE      =
  449. *     I_BYPASSING_BUFFER   =
  450. *     I_CONSISTENCY_CHECK  =
  451. *     I_STRUCTURE_NAME     = 'T001W'
  452. *     IS_VARIANT           =
  453.       i_save               = 'X'
  454. *     I_DEFAULT            = 'X'
  455.       is_layout            = ps_layout
  456. *     IS_PRINT             =
  457. *     IT_SPECIAL_GROUPS    =
  458. *     IT_TOOLBAR_EXCLUDING =
  459. *     IT_HYPERLINK         =
  460. *     IT_ALV_GRAPHICS      =
  461. *     IT_EXCEPT_QINFO      =
  462. *     IR_SALV_ADAPTER      =
  463.     CHANGING
  464.       it_outtab            = i_detail[]
  465.       it_fieldcatalog      = fieldcat2[].
  466. *           IT_SORT                       =
  467. *           IT_FILTER                     =
  468. *         EXCEPTIONS
  469. *           INVALID_PARAMETER_COMBINATION = 1
  470. *           PROGRAM_ERROR                 = 2
  471. *           TOO_MANY_LINES                = 3
  472. *           others                        = 4
  473.   .
  474. ENDFORM.                    " FRM_ALV_SHOW_DETAIL
  475. *&---------------------------------------------------------------------*
  476. *&      Module  USER_COMMAND_1002  INPUT
  477. *&---------------------------------------------------------------------*
  478. *       text
  479. *----------------------------------------------------------------------*
  480. MODULE user_command_1002 INPUT.
  481.   DATA ok_code2 TYPE sy-ucomm.
  482.   ok_code2 = sy-ucomm.
  483.   CLEAR sy-ucomm.
  484.   CASE ok_code2.
  485.     WHEN 'BACK'.
  486.       LEAVE TO SCREEN 0.
  487.   ENDCASE.
  488. ENDMODULE.                 " USER_COMMAND_1002  INPUT
复制代码


程序执行效果:
ooalv自定义按钮、单击、双击、列编辑切换的事件用法 
点击“明细” 跳入第二屏,更多按钮响应效果自己体验
ooalv自定义按钮、单击、双击、列编辑切换的事件用法 

sap系统的ooalv的学习标准程序:
BCALV_EDIT_01
BCALV_EDIT_02
BCALV_EDIT_03
BCALV_EDIT_04
BCALV_EDIT_05 双击编辑单元格,更改编辑状态(ooalv 单元格控制)
BCALV_EDIT_06
BCALV_EDIT_07
BCALV_EDIT_08