方法1,也是大家常见的方法通过函数   REUSE_ALV_GRID_DISPLAY

TYPESBEGIN OF  ty_spfli,   "定义结构
    carrid like spfli-carrid,
    connid like spfli-connid,
  END OF ty_spfli.

DATA: it_spfli TYPE STANDARD TABLE OF ty_spfli.  "定义内表

DATA:
    wa_fieldcat TYPE slis_fieldcat_alv ,    " 相当于工作区
    i_fieldcat  TYPE slis_t_fieldcat_alv ,  " 存放输出栏位名称的列表
    i_layout    TYPE slis_layout_alv .      " 负责整个ALV的全局属性

SELECT carrid connid INTO TABLE it_spfli   "获取内表数据
  FROM spfli
  UP TO 10 ROWS.

PERFORM getdata.
PERFORM islayout.

              CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'   "调用函数
                EXPORTING
                  I_CALLBACK_PROGRAM                = sy-repid
                  IS_LAYOUT                         = i_layout
                  IT_FIELDCAT                       = i_fieldcat[]
                  I_SAVE                            'X'
                TABLES
                  t_outtab                          = it_spfli
                EXCEPTIONS
                  PROGRAM_ERROR                     1
                  OTHERS                            2
                        .
              IF sy-subrc <> 0.
* Implement suitable error handling here
              ENDIF.
FORM getdata.

  wa_fieldcat-fieldname   'CARRID'.        " 需要输出的内表的字段名
  wa_fieldcat-seltext_l   '航班号'" 字段的描述-长字段标签
  wa_fieldcat-seltext_m   '航班号'" 字段描述-中字段标签
  wa_fieldcat-seltext_s   '航班号'" 字段描述-短字段标签
  wa_fieldcat-fix_column  'X' .           " 是否是固定列
  APPEND wa_fieldcat TO i_fieldcat.
  CLEAR  wa_fieldcat.

  wa_fieldcat-fieldname   'CONNID'.        " 需要输出的内表的字段名
  wa_fieldcat-seltext_l   '航班连接号'" 字段的描述-长字段标签
  wa_fieldcat-seltext_m   '航班连接号'" 字段描述-中字段标签
  wa_fieldcat-seltext_s   '航班连接号'" 字段描述-短字段标签
  wa_fieldcat-fix_column  'X' .           " 是否是固定列
  APPEND wa_fieldcat TO i_fieldcat.
  CLEAR  wa_fieldcat.
ENDFORM.

FORM islayout.
  i_layout-zebra                  'X' .          " 使ALV界面呈现颜色交替
  i_layout-colwidth_optimize      'X' .          " 自动优化列宽
  i_layout-detail_initial_lines   'X' .          " 是否出现细节屏幕
ENDFORM.

方法2,也是大家常见的方法通过函数   REUSE_ALV_GRID_DISPLAY_LVC  在使用上会比第一种方法功能实现上多些

TYPESBEGIN OF  ty_spfli,   "定义结构
    carrid like spfli-carrid,
    connid like spfli-connid,
  END OF ty_spfli.

DATA: it_spfli TYPE STANDARD TABLE OF ty_spfli.  "定义内表


DATA:

     wa_fieldcat TYPE lvc_s_fcat ,  " 相当于工作区

     i_fieldcat  TYPE lvc_t_fcat ,  " 存放输出栏位名称的列表

     i_layout    TYPE lvc_s_layo .  " 负责整个ALV的全局属性

SELECT carrid connid INTO TABLE it_spfli   "获取内表数据
  FROM spfli
  UP TO 10 ROWS.

PERFORM getdata.
PERFORM islayout.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
  EXPORTING
    I_CALLBACK_PROGRAM                = sy-repid
    IS_LAYOUT_LVC                     = i_layout
    IT_FIELDCAT_LVC                   = i_fieldcat[]
    I_DEFAULT                         'X'
    I_SAVE                            'A'
  TABLES
    t_outtab                          = it_spfli
  EXCEPTIONS
    PROGRAM_ERROR                     1
    OTHERS                            2
          .
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

FORM getdata.
  wa_fieldcat-fieldname   'CARRID'.        " 需要输出的内表的字段名
  wa_fieldcat-scrtext_l   '航班号'" 字段的描述-长字段标签
  wa_fieldcat-scrtext_m   ='航班号'.
  wa_fieldcat-scrtext_s   ='航班号'.
  wa_fieldcat-fix_column  'X' .           " 是否是固定列
  APPEND wa_fieldcat TO i_fieldcat.
  CLEAR  wa_fieldcat.

  wa_fieldcat-fieldname   'CONNID'.        " 需要输出的内表的字段名
  wa_fieldcat-scrtext_l   '航班连接号'" 字段的描述-长字段标签
  wa_fieldcat-scrtext_m   '航班连接号'.
  wa_fieldcat-scrtext_s   '航班连接号'.
  wa_fieldcat-fix_column  'X' .           " 是否是固定列
  APPEND wa_fieldcat TO i_fieldcat.
  CLEAR  wa_fieldcat.
ENDFORM.

FORM islayout.

  i_layout-zebra                  'X' .          " 使ALV界面呈现颜色交替
*  i_layout-colwidth_optimize      = 'X' .          " 自动优化列宽
*  i_layout-detail_initial_lines   = 'X' .          " 是否出现细节屏幕

ENDFORM.

 

方法3,SALV方法实现ALV展示,是通过静态类的方法实现的。

CLASS lcl_report DEFINITION.

PUBLIC SECTION.
* 定义SALV输出内表
  TYPESBEGIN OF st_spfli,
       carrid TYPE spfli-carrid,
       connid TYPE spfli-connid,
       cityfrom TYPE spfli-cityfrom,
       cityto   TYPE spfli-cityto,
       distance TYPE spfli-distance,
    END OF st_spfli.

  DATA: it_spfli TYPE STANDARD TABLE OF st_spfli.

  DATA: o_alv TYPE REF TO cl_salv_table.

  METHODS:
         getdata,      "获取数据
         genoutput.    "生成输出内容
ENDCLASS.

CLASS lcl_report IMPLEMENTATION.

  METHOD getdata.

     SELECT carrid connid cityfrom cityto distance
       INTO TABLE it_spfli
       FROM spfli
       UP TO 10 rows.

  ENDMETHOD.

  METHOD genoutput.
    DATA: lx_msg TYPE REF TO cx_salv_msg.
    TRY .
       cl_salv_table=>factory(                          "此乃固定格式
         IMPORTING
           r_salv_table = o_alv
         CHANGING
           t_table     = it_spfli
       ).
    CATCH cx_salv_msg INTO lx_msg.

    ENDTRY.
    o_alv->display).                                  "将数据通过ALV方式显示到屏幕
  ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.
  DATA: lo_report TYPE REF TO lcl_report.

  create OBJECT lo_report.

  lo_report->getdata).                               "获取数据
  lo_report->genoutput).                             "生成SALV 

 

方法4,面向对象的方法实现ALV展示,是通过静态类的方法实现的(OOALV)。

DATA: g_grid TYPE REF TO cl_gui_alv_grid.
DATA: gt_sfight TYPE TABLE OF sfight.
DATA: con1_ref TYPE REF TO cl_gui_custom_container.
DATA: gt_fieldcat TYPE LVC_T_FCAT.
DATA: gt_sort TYPE lvc_t_sort. // 排序
DATA: gs_layout TYPE lvc_s_layo.
DATA: gs_variant TYPE disvariant.
START-OF_SELECTION.
SELECT * FROM sflight
INTO TABLE gt_sflight UP TO 25 ROWS.
CALL SCREEN 100.

gs_variant-report = sy-repid. " 当前的系统程序
gs_variant-username = sy-uname. " 当前的用户名

PERFORM setting_catalog.
PERFORM setting_sort.
PERFORM setting_layout CHANGING gs_layout.

CALL METHOD g_grid->set_table_for_first_display
EXPORTING
i_structure_name = 'SFLIGHT'
i_save = 'A'
is_variant = gs_variant
i_default = ''
is_layout = gs_layout
" it_toolbar_excluding = gs_toolbar
CHANGING
it_outtab = gt_sflight
it_fieldcatalog = gt_fieldcat
it_sort = gt_sort.

FORM setting_layout CHANGING p_layout TYPE lvc_s_layo. " 设定ALV的格式
p_layout-cwidth_opt = 'X'. " 自动调节字段长度
p_layout-grid_title = 'LAYOUT TEST' . " 标题栏
p_layout-sel_mode = 'D' " 选择模式: 可选择多行
p_layout-zebra = 'X'. " 指定 Sripe 属性 斑马线输出
ENDFORM. " setting_layout

FORM setting_sort. " 设定排序字段
DATA: ls_sort TYPE lvc_s_sort.
ls_sort-spos = '1'.
ls_sort-FIELDNAME = 'CARRID'.
ls_sort-up = 'X'.
ls_sort-subtot = 'X'.
APPEND ls_sort TO gt_sort.
ENDFORM.

FORM setting_catalog. " 设定自定义字段
DATA ls_fieldcat TYPE LVC_S_FCAT.

ls_fieldcat-fieldname = 'CARRID'.
ls_fieldcat-coltext = 'Carrid ID'.
ls_fieldcat-just = 'L'.
ls_fieldcat-key = 'X'.
ls_fieldcat-outputlen = '2'.
APPEND ls_fieldcat TO gt_fieldcat.
CAEAR ls_fielecat.

ls_fieldcat-fieldname = 'CONNID'.
ls_fieldcat-coltext = 'Flight Number'.
ls_fieldcat-just = 'C'.
ls_fieldcat-key = 'X'.
ls_fieldcat-outputlen = '4'.
APPEND ls_fieldcat TO gt_fieldcat.
CAEAR ls_fielecat.

ls_fieldcat-fieldname = 'PRICE'.
ls_fieldcat-coltext = 'Airfare'.
ls_fieldcat-just = 'R'.
ls_fieldcat-key = ''.
ls_fieldcat-outputlen = '15'.
APPEND ls_fieldcat TO gt_fieldcat.
CAEAR ls_fielecat.
ENDFORM.

" 在MODULE PBO创建容器

MODULE init_con OUTPUT.
IF con1_ref IS INITIAL.
CREATE OBJECT con1_ref
EXPONTING
container_name = 'CON1'.
" 创建 ALV GRID 控件
CREATE OBJECT g_grid
EXPORING
i_parent = con1_ref.
ENDMODULE.

 方法5,dialog屏幕逻辑流显示  (方法4和方法5我会整理完后另外编辑出来)

posted on 2019-10-21 10:01  霜叶红花  阅读(3585)  评论(0编辑  收藏  举报