OO ALV完整版

b站视频的源码,自己一个字母一个字母敲的,数据库表照着视频建,没有表拿着代码进去运行也没用。
在这里插入图片描述

REPORT ZTS_XSY_TEST23.

INCLUDE ZTS_XSY_TEST23TOP.
INCLUDE ZTS_XSY_TEST23CLS.
INCLUDE ZTS_XSY_TEST23O01.
INCLUDE ZTS_XSY_TEST23I01.
INCLUDE ZTS_XSY_TEST23FORM.

START-OF-SELECTION.
  PERFORM GET_DATA.

END-OF-SELECTION.
  IF GT_STUDENT IS NOT INITIAL.
    CALL SCREEN 0100.
*    PERFORM DISPLAY_DATA.
  ELSE.
    MESSAGE S001(EU) DISPLAY LIKE 'E'.
  ENDIF.
*&---------------------------------------------------------------------*
*&  包含                ZTS_XSY_TEST23TOP
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&  包含                ZTS_XSY_TEST16TOP
*&---------------------------------------------------------------------*
TYPES: BEGIN OF gty_student,
         box TYPE c LENGTH 1.
        INCLUDE STRUCTURE zbc_xsy_student.
TYPES:  field_color  TYPE lvc_t_scol,
        field_modify TYPE lvc_t_styl, "设置为是否可编辑
        END OF gty_student.

DATA gt_student TYPE TABLE OF gty_student.
DATA gs_student TYPE gty_student.

DATA gt_download TYPE TABLE OF zbc_xsy_student.
DATA gs_download TYPE zbc_xsy_student.

*DATA gt_fieldname TYPE TABLE OF char20.
DATA: BEGIN OF GT_FIELDNAME OCCURS 0,
        FIELDNAME TYPE C LENGTH 20,
      END OF GT_FIELDNAME.
*OO ALV DISPLAY
*DATA gs_alv TYPE REF TO cl_gui_alv_grid.  "ALV对象
*DATA gs_parent TYPE REF TO cl_gui_custom_container.

*DATA gt_fieldcat TYPE lvc_t_fcat. "列结构
*DATA gs_fieldcat TYPE lvc_s_fcat. "列结构-工作区
*
*DATA gs_layout   TYPE lvc_s_layo."表单格式
*DATA gs_stable TYPE lvc_s_stbl."固定

DATA gt_exclude TYPE ui_functions . "隐藏的按钮
DATA gs_exclude TYPE ui_func. "隐藏的按钮-工作区

DATA gt_rows TYPE lvc_t_row. "获取选中的行
DATA gs_rows TYPE lvc_s_row. "获取选中的行-工作区


DATA ok_code TYPE sy-ucomm.
DATA save_ok TYPE sy-ucomm.

DATA gs_variant TYPE disvariant.


*事件相关
CLASS lcl_app_compt DEFINITION DEFERRED.
DATA event_handler TYPE REF TO lcl_app_compt.

DATA: gs_alv      TYPE REF TO cl_gui_alv_grid,           "ALV类
      gs_con      TYPE REF TO cl_gui_custom_container,    "容器类
      gt_fieldcat TYPE lvc_t_fcat,                    "列格式
      gs_fieldcat TYPE lvc_s_fcat,                   "列格式-结构
      gs_stable   TYPE lvc_s_stbl,                   "光标不动
      gs_layout   TYPE lvc_s_layo.                    "输出格式

*定义宏
DATA gv_pos TYPE i.
DEFINE %%add_fieldcat.
  CLEAR GS_FIELDCAT.
  GV_POS = GV_POS + 1.
  GS_FIELDCAT-COL_POS = GV_POS.
  GS_FIELDCAT-FIELDNAME = &1.
  GS_FIELDCAT-SCRTEXT_M = &2.
  GS_FIELDCAT-OUTPUTLEN = &3.

  CASE &1.
     WHEN 'WEIGH'.
       GS_FIELDCAT-QFIELDNAME = 'ZUNIT'.
       GS_FIELDCAT-EDIT = 'X'.  "以列为单位
       GS_FIELDCAT-DECIMALS = 2.
     WHEN 'SEX'.
       GS_FIELDCAT-EDIT = 'X'.
     WHEN 'ZCODE'.
       GS_FIELDCAT-HOTSPOT = 'X'."热点
  ENDCASE.
  APPEND GS_FIELDCAT TO GT_FIELDCAT.

END-OF-DEFINITION.



SELECT-OPTIONS s_zcode FOR gs_student-zcode.
*&---------------------------------------------------------------------*
*&  包含                ZTS_XSY_TEST23CLS
*&---------------------------------------------------------------------*
CLASS lcl_app_compt DEFINITION.
  PUBLIC SECTION.
    METHODS handle_toolbar FOR EVENT toolbar
                  OF cl_gui_alv_grid
      IMPORTING e_object.

    METHODS handle_user_command FOR EVENT user_command
                  OF cl_gui_alv_grid
      IMPORTING e_ucomm.

*    HOTSPOT
    METHODS handle_hotspot_click
                  FOR EVENT hotspot_click OF cl_gui_alv_grid
      IMPORTING e_row_id
                  e_column_id.
*    双击
    METHODS handle_double_click FOR EVENT double_click
                  OF cl_gui_alv_grid
      IMPORTING e_row
                  e_column.

    METHODS handle_data_changed FOR EVENT data_changed
                  OF cl_gui_alv_grid
      IMPORTING er_data_changed.
*                                     E_ONF4
*                                     E_ONF4_BEFORE
*                                     E_ONF4_AFTER
*                                     E_UCOMM.

ENDCLASS.

*&--------------------------------------------------------------------
*& CLASS LCL_APP_COMPT IMPLEMENTATION
*&---------------------------------------------------------------------*
CLASS lcl_app_compt IMPLEMENTATION.
  METHOD handle_toolbar.
    PERFORM fm_handle_toolbar USING e_object.
  ENDMETHOD.

* HANDLE USER COMMAND
  METHOD handle_user_command.
    PERFORM fm_user_command USING e_ucomm.
  ENDMETHOD.

*  HOTSPOT
  METHOD handle_hotspot_click.
    PERFORM hotspot_click USING e_row_id e_column_id.
  ENDMETHOD.

  METHOD handle_double_click.
    PERFORM fm_double_click USING e_row e_column.
  ENDMETHOD.

*  METHOD DATA CHANGED
  METHOD handle_data_changed.
    PERFORM fm_data_changed USING er_data_changed->mt_mod_cells.
  ENDMETHOD.
ENDCLASS.
*&---------------------------------------------------------------------*
*&  包含                ZTS_XSY_TEST23O01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  INIT_ALV  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE init_alv OUTPUT.
  IF gs_alv IS INITIAL.
    PERFORM create_alv.
    PERFORM build_fieldcat.
    PERFORM build_layout.
    PERFORM build_exclude.
    PERFORM set_handler.
    PERFORM build_alv.
  ELSE.
    PERFORM refresh_alv.
  ENDIF.
ENDMODULE.

*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS '0100'.
  SET TITLEBAR '0100'.
ENDMODULE.
*&---------------------------------------------------------------------*
*&  包含                ZTS_XSY_TEST23I01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  EXIT  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE exit INPUT.
  LEAVE PROGRAM.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
*  SAVE_OK = OK_CODE.
*  CLEAR SAVE_OK.
  CASE ok_code.
    WHEN 'BACK'.
      LEAVE TO SCREEN 0.
    WHEN 'EXIT' OR 'CANCEL'.
      LEAVE PROGRAM.
    WHEN 'DOWNLOAD'.
      PERFORM download_file.
    WHEN 'SAVE'.
      CALL METHOD gs_alv->check_changed_data
*        IMPORTING
*          e_valid   =
*        CHANGING
*          c_refresh = 'X'
          .


      REFRESH gt_download.
      LOOP AT gt_student INTO gs_student.
        CLEAR gs_download.
        MOVE-CORRESPONDING gs_student TO gs_download.
        APPEND gs_download TO gt_download.
      ENDLOOP.
      MODIFY ZBC_XSY_STUDENT FROM TABLE  GT_DOWNLOAD.
      IF SY-SUBRC = 0.
        COMMIT WORK.
        MESSAGE S001(EU) WITH '修改成功!'.
      ELSE.
        ROLLBACK WORK.
        MESSAGE S002(EU) WITH '修改失败!' DISPLAY LIKE 'E'.
      ENDIF.
  ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*&  包含                ZTS_XSY_TEST23FORM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_data .
  DATA ls_scol LIKE LINE OF gs_student-field_color.
  DATA ls_styl TYPE   lvc_s_styl.
*  DATA ls_styl TYPE   gs_student-field_modify.
  SELECT *
    FROM zbc_xsy_student
    INTO CORRESPONDING FIELDS OF TABLE gt_student
    WHERE zcode IN s_zcode.
  LOOP AT gt_student INTO gs_student.
*    单元格颜色
    IF gs_student-sex IS INITIAL.
      ls_scol-fname = 'SEX'.
      ls_scol-color-col = '3'.
      APPEND ls_scol TO gs_student-field_color.
    ENDIF.

**    单元格可修改设置
    IF gs_student-sex IS NOT INITIAL.
      ls_styl-fieldname = 'SEX'.
*     LS_STYL-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED.
      ls_styl-style = cl_gui_alv_grid=>mc_style_disabled.
      APPEND ls_styl TO gs_student-field_modify.
    ENDIF.

*    体重字段都不可修改
    ls_styl-fieldname = 'WEIGH'.
    ls_styl-style = cl_gui_alv_grid=>mc_style_disabled.
    APPEND ls_styl TO gs_student-field_modify.

    MODIFY gt_student FROM gs_student.
  ENDLOOP.
ENDFORM.


*&---------------------------------------------------------------------*
*&      Form  DISPLAY_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM display_data .
*   PERFORM BUILD_FIELDCAT.
*   PERFORM BUILD_ALV.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM build_fieldcat .
  CLEAR gt_fieldcat[].
  %%add_fieldcat:
     'ZCODE'   '学生编号'    '10'   ,
     'ZNAME'   '学生姓名'    '20'   ,
     'SEX'     '性别'        '5'    ,
     'ZSCHOOL' '学校'        '10'   ,
     'WEIGH'   '体重'        '10'   ,
     'ZUNIT'   '单位'        '5'    .

*  PERFORM ADD_FIELDCAT_ALV USING : '' '' '' '',

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  BUILD_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM build_alv .
  gs_variant-report = sy-repid.
**GS_PARENT的实例化-实例化容器
*  CREATE OBJECT gs_parent
*    EXPORTING
*      container_name = 'GC_COM'.  "界面中的CUSTOMER CONTROL控件名称
*
**实例化
*  CREATE OBJECT gs_alv
*    EXPORTING
*      i_parent = gs_parent.

*调用方法输出
  CALL METHOD gs_alv->set_table_for_first_display
    EXPORTING
*     i_buffer_active               =
*     i_bypassing_buffer            =
*     i_consistency_check           =
*     i_structure_name              =
      is_variant                    = gs_variant
      i_save                        = 'A'
*     i_default                     = 'X'
      is_layout                     = gs_layout
*     is_print                      =
*     it_special_groups             =
      it_toolbar_excluding          = gt_exclude
*     it_hyperlink                  =
*     it_alv_graphics               =
*     it_except_qinfo               =
*     ir_salv_adapter               =
    CHANGING
      it_outtab                     = gt_student
      it_fieldcatalog               = gt_fieldcat
*     it_sort                       =
*     it_filter                     =
    EXCEPTIONS
      invalid_parameter_combination = 1
      program_error                 = 2
      too_many_lines                = 3
      OTHERS                        = 4.
  IF sy-subrc <> 0.
*   Implement suitable error handling here
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  CREATE_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM create_alv .
*创建容器
  CREATE OBJECT gs_con
    EXPORTING
      container_name = 'GC_CON'.
*将ALV植入容器中
  CREATE OBJECT gs_alv
    EXPORTING
      i_parent = gs_con.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  BUILD_LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM build_layout .
  gs_layout-col_opt = 'X'.
  gs_layout-zebra = 'X'.
  gs_layout-box_fname = 'BOX'.
  gs_layout-ctab_fname = 'FIELD_COLOR'.
*  gs_layout-ctab_fname = 'COLOR'.
  gs_layout-stylefname = 'FIELD_MODIFY'."以单元格为单位

*  gs_layout-stylefname = 'CELLSTL'."单元格编辑
*  gs_layout-sel_mode = 'A'. "选择模式
*  gs_layout-info_fname = 'COLOR'."单元格颜色
*  gs_layout-edit = 'X'. "可编辑
ENDFORM.


FORM refresh_alv.
  gs_stable-row = 'X'.
  gs_stable-col = 'X'.
  CALL METHOD gs_alv->refresh_table_display
    EXPORTING
      is_stable = gs_stable
*     i_soft_refresh =
    EXCEPTIONS
      finished  = 1
      OTHERS    = 2.
  IF sy-subrc <> 0.
*   Implement suitable error handling here
  ENDIF.
ENDFORM.


*&---------------------------------------------------------------------*
*&      Form  BUILD_EXCLUDE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM build_exclude.
*隐藏按钮
  CLEAR gt_exclude[].
*      GS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_INSERT_ROW.
*     APPEND GS_EXCLUDE TO GT_EXCLUDE.

*    GS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_DELETE_ROW.
*    APPEND GS_EXCLUDE TO GT_EXCLUDE.

*   GS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_APPEND_ROW.
*    APPEND GS_EXCLUDE TO GT_EXCLUDE.

*   GS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY_ROW.
*    APPEND GS_EXCLUDE TO GT_EXCLUDE.

*   GS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_CUT.
*    APPEND GS_EXCLUDE TO GT_EXCLUDE.

  PERFORM   append_alv_exclude_functions TABLES gt_exclude
    USING:
          cl_gui_alv_grid=>mc_fc_loc_insert_row,
          cl_gui_alv_grid=>mc_fc_loc_delete_row,
          cl_gui_alv_grid=>mc_fc_loc_append_row,
          cl_gui_alv_grid=>mc_fc_loc_copy_row,
          cl_gui_alv_grid=>mc_fc_loc_cut.

ENDFORM.


FORM append_alv_exclude_functions TABLES pt_exclude TYPE ui_functions
                                  USING p_exclude TYPE ui_func.
  APPEND p_exclude TO pt_exclude.
ENDFORM.


*&---------------------------------------------------------------------*
*&      Form  SET_HANDLER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM set_handler.
  CREATE OBJECT event_handler.

  SET HANDLER event_handler->handle_toolbar FOR gs_alv.
  SET HANDLER event_handler->handle_user_command FOR gs_alv.
*  HOTSPOT
  SET HANDLER event_handler->handle_hotspot_click FOR gs_alv.
  SET HANDLER event_handler->handle_double_click FOR gs_alv.
  SET HANDLER event_handler->handle_data_changed FOR gs_alv.

*  DATA CHANGED 事件触发时点
  CALL METHOD gs_alv->register_edit_event
    EXPORTING
      i_event_id = cl_gui_alv_grid=>mc_evt_enter   "回车触发
    EXCEPTIONS
      error      = 1
      OTHERS     = 2.
  IF sy-subrc <> 0.
*   Implement suitable error handling here
  ENDIF.

ENDFORM.


FORM fm_handle_toolbar USING p_object TYPE REF TO cl_alv_event_toolbar_set.

  "向MT_TOOLBAR 中增加行,增加按钮
  DATA ls_button TYPE stb_button.

  CLEAR : ls_button .
  ls_button-butn_type = '3'.  "分割线
  APPEND ls_button TO p_object->mt_toolbar.

  CLEAR : ls_button .
  ls_button-function = 'CALLSF'.
  ls_button-text     = '调用SF'.
  ls_button-icon     = icon_failure.
  APPEND ls_button  TO p_object->mt_toolbar.

  CLEAR : ls_button .
  ls_button-function = 'EDIT'.
  ls_button-text     = '修改选中行'.
  ls_button-icon     = icon_toggle_display_change.
  APPEND ls_button  TO p_object->mt_toolbar.

  CLEAR : ls_button .
  ls_button-function = 'DOWNLOAD'.
  ls_button-text     = '下载表单'.
  ls_button-icon     = icon_layout_control.
  APPEND ls_button  TO p_object->mt_toolbar.
ENDFORM.

FORM fm_user_command USING p_ucomm TYPE sy-ucomm.

  CASE p_ucomm.
    WHEN 'CALLSF'.
      MESSAGE s000(eu) WITH '点击了调用SF的按钮'   .
    WHEN 'EDIT'.
      PERFORM change_edit_mode.
    WHEN 'DOWNLOAD'.
      PERFORM download_file.
  ENDCASE.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  HOTSPOT_CLICK
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_E_ROW_ID  text
*      -->P_E_COLUMN_ID  text
*----------------------------------------------------------------------*
FORM hotspot_click  USING    p_row_id TYPE lvc_s_row
                             p_column_id TYPE lvc_s_col.
*  DATA : lv_value(50).
*
*  CALL METHOD gs_alv->get_current_cell
*    IMPORTING
*      e_value = lv_value.
*
*  CASE p_column_id-fieldname.
*    WHEN 'SEX'.
*      SET PARAMETER ID 'MAT' FIELD lv_value.
*      CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
*  ENDCASE.

  IF p_column_id-fieldname = 'ZCODE'.
    READ TABLE gt_student INTO gs_student INDEX p_row_id-index.
    MESSAGE s000(eu) WITH '单击了第' p_row_id-index '行,学号字段的值为' gs_student-zcode.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  CHANGE_EDIT_MODE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM change_edit_mode .
  DATA lv_lines TYPE i.
  DATA ls_modify TYPE lvc_s_styl.
*   获取选中的行
  CALL METHOD gs_alv->get_selected_rows
    IMPORTING
      et_index_rows = gt_rows
*     et_row_no     =
    .

  DESCRIBE TABLE gt_rows LINES lv_lines.
*  CHECK LV_LINES = 1.
  IF lv_lines <> 1.
    MESSAGE s000(eu) WITH '只可选择单行进行可编辑操作!' DISPLAY LIKE 'E'.
    EXIT.
  ENDIF.
*  2.修改当前行的可修改状态
  READ TABLE gt_rows INTO gs_rows INDEX 1."读取选中行的序号
  CHECK sy-subrc = 0.

  READ TABLE gt_student INTO gs_student INDEX gs_rows-index.
  IF sy-subrc = 0.
*     查看表中是否已经存在针对WEIGH字段的可编辑状态
    READ TABLE gs_student-field_modify INTO ls_modify WITH KEY fieldname = 'WEIGH'.
    IF sy-subrc = 0. "当前已经存在设定的状态-当前是不可修改的状态
      DELETE  gs_student-field_modify INDEX sy-tabix."把不可修改的状态去掉
    ELSE."当前是可修改的状态
      "不用做操作
    ENDIF.
    MODIFY gt_student FROM gs_student INDEX gs_rows-index.
  ENDIF.
*  3.刷新界面
  PERFORM refresh_alv.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  DOWNLOAD_FILE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM download_file .
  DATA lv_filename TYPE string.
*1.获取文件名
  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      def_filename     = '学生信息表'
*     DEF_PATH         = ' '
      mask             = ',EXCEL.xls,*.xls,'
      mode             = 'S'
      title            = '整表单保存'
    IMPORTING
      filename         = lv_filename
*     RC               =
    EXCEPTIONS
      inv_winsys       = 1
      no_batch         = 2
      selection_cancel = 3
      selection_error  = 4
      OTHERS           = 5.
  IF sy-subrc <> 0.
    EXIT.
* Implement suitable error handling here
  ENDIF.

*2.表单下载
  CHECK lv_filename IS NOT INITIAL."检查文件名称

*表单抬头
  IF gt_fieldname IS INITIAL.
    gt_fieldname-fieldname = '集团'.
    APPEND gt_fieldname.
    gt_fieldname-fieldname = '学号'.
    APPEND gt_fieldname.
    gt_fieldname-fieldname = '姓名'.
    APPEND gt_fieldname.
    gt_fieldname-fieldname = '性别'.
    APPEND gt_fieldname.
    gt_fieldname-fieldname = '学校'.
    APPEND gt_fieldname.
    gt_fieldname-fieldname = '体重'.
    APPEND gt_fieldname.
    gt_fieldname-fieldname = '单位'.
    APPEND gt_fieldname.
  ENDIF.
*2.1下载内表的转换
  REFRESH gt_download.
  LOOP AT gt_student INTO gs_student.
    CLEAR gs_download.
    MOVE-CORRESPONDING gs_student TO gs_download.
    APPEND gs_download TO gt_download.
  ENDLOOP.

  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
*     BIN_FILESIZE            =
      filename                = lv_filename
*     FILETYPE                = 'ASC'
*     APPEND                  = ' '
      write_field_separator   = 'X'
*     HEADER                  = '00'
*     TRUNC_TRAILING_BLANKS   = ' '
*     WRITE_LF                = 'X'
*     COL_SELECT              = ' '
*     COL_SELECT_MASK         = ' '
*     DAT_MODE                = ' '
*     CONFIRM_OVERWRITE       = ' '
*     NO_AUTH_CHECK           = ' '
*     CODEPAGE                = ' '
*     IGNORE_CERR             = ABAP_TRUE
*     REPLACEMENT             = '#'
*     WRITE_BOM               = ' '
*     TRUNC_TRAILING_BLANKS_EOL       = 'X'
*     WK1_N_FORMAT            = ' '
*     WK1_N_SIZE              = ' '
*     WK1_T_FORMAT            = ' '
*     WK1_T_SIZE              = ' '
*     WRITE_LF_AFTER_LAST_LINE        = ABAP_TRUE
*     SHOW_TRANSFER_STATUS    = ABAP_TRUE
*     VIRUS_SCAN_PROFILE      = '/SCET/GUI_DOWNLOAD'
* IMPORTING
*     FILELENGTH              =
    TABLES
      data_tab                = gt_download "GT_STUDENT
      fieldnames              = gt_fieldname[]
    EXCEPTIONS
      file_write_error        = 1
      no_batch                = 2
      gui_refuse_filetransfer = 3
      invalid_type            = 4
      no_authority            = 5
      unknown_error           = 6
      header_not_allowed      = 7
      separator_not_allowed   = 8
      filesize_not_allowed    = 9
      header_too_long         = 10
      dp_error_create         = 11
      dp_error_send           = 12
      dp_error_write          = 13
      unknown_dp_error        = 14
      access_denied           = 15
      dp_out_of_memory        = 16
      disk_full               = 17
      dp_timeout              = 18
      file_not_found          = 19
      dataprovider_exception  = 20
      control_flush_error     = 21
      OTHERS                  = 22.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.



ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FM_DOUBLE_CLICK
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_E_ROW  text
*      -->P_E_COLUMN  text
*----------------------------------------------------------------------*
FORM fm_double_click  USING    p_e_row  TYPE lvc_s_row
                               p_e_column TYPE lvc_s_col.

  DATA lv_value TYPE c LENGTH 20.
  DATA ls_col TYPE lvc_s_col.
  CALL METHOD gs_alv->get_current_cell
    IMPORTING
*     e_row     =
      e_value   = lv_value
*     e_col     =
*     es_row_id =
      es_col_id = ls_col
*     es_row_no =
    .


* 点击了xxx字段,值为XXX
  MESSAGE s000(eu) WITH '单击了' ls_col-fieldname '字段,值为' lv_value.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FM_DATA_CHANGED
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM fm_data_changed USING PT_CELL TYPE LVC_T_MODI .
  DATA LS_CELL TYPE LVC_S_MODI.

   LOOP AT PT_CELL INTO LS_CELL.

*     1.读取修改的行
     READ TABLE GT_STUDENT INTO GS_STUDENT INDEX LS_CELL-ROW_ID.
     IF SY-SUBRC = 0.
*     2.根据字段改对应的值
       CASE LS_CELL-FIELDNAME.
         WHEN 'SEX'.
           GS_STUDENT-SEX = LS_CELL-VALUE.
         WHEN 'WEIGH'.
           GS_STUDENT-WEIGH = LS_CELL-VALUE.
       ENDCASE.
       MODIFY GT_STUDENT FROM GS_STUDENT INDEX LS_CELL-ROW_ID.
     ENDIF.
   ENDLOOP.
ENDFORM.

在这里插入图片描述
在这里插入图片描述

PROCESS BEFORE OUTPUT.
 MODULE STATUS_0100.
MODULE INIT_ALV.
*
PROCESS AFTER INPUT.
MODULE EXIT AT EXIT-COMMAND.
MODULE USER_COMMAND_0100.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值