[代码]基于动态内表的ALV

SAP项目有会要动态显示ALV列的需求,就是ALV的列数量不固定,这是就要用到动态内表的技术,动态内表通过cl_alv_table_create=>create_dynamic_table来创建。

完整代码:

REPORT ZTEST_ALV_DYNAMIC.
*-------------ALV 相关--------------------------
DATA: wa_layo TYPE lvc_s_layo.
DATA: wa_fcat TYPE lvc_s_fcat,
      it_fcat TYPE lvc_t_fcat.

DATA  it_scol TYPE lvc_t_scol.

DATA: g_grid TYPE REF TO cl_gui_alv_grid.

FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE,
               <dyn_wa>,
               <dyn_field>.

DATA: dy_table TYPE REF TO data,
      dy_line  TYPE REF TO data.

DATA: colname(10),
      index(2).

* 列数
PARAMETERS: col TYPE i.

CLEAR: it_fcat.
* 根据条件动态生成列catalog
DO col TIMES.
  index = index + 1.
  CONCATENATE 'COL' index INTO colname.
  PERFORM frm_add_fcat USING:
         colname 'C' '描述' '100'.
ENDDO.

* 根据it_fact生成动态表
CALL METHOD cl_alv_table_create=>create_dynamic_table
  EXPORTING
    it_fieldcatalog = it_fcat
  IMPORTING
    ep_table        = dy_table.

ASSIGN dy_table->* TO <dyn_table>.

CREATE DATA dy_line LIKE LINE OF <dyn_table>.

ASSIGN dy_line->* TO <dyn_wa>.

* 给表字段赋值
CLEAR: index.
DO col TIMES.
  index = index + 1.
  CONCATENATE 'COL' index INTO colname.
  ASSIGN COMPONENT colname OF STRUCTURE <dyn_wa>  TO <dyn_field>.
  <dyn_field> = '列数据'.
ENDDO.
APPEND <dyn_wa> TO <dyn_table>.

* 相当于给内表放入两条数据
CLEAR: index.
DO col TIMES.
  index = index + 1.
  CONCATENATE 'COL' index INTO colname.
  ASSIGN COMPONENT colname OF STRUCTURE <dyn_wa> TO <dyn_field>.
  <dyn_field> = '列数据'.
ENDDO.
APPEND <dyn_wa> TO <dyn_table>.

CLEAR: wa_layo.
wa_layo-zebra = 'X'.
wa_layo-cwidth_opt = 'X'.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
  EXPORTING
    i_callback_program = sy-repid
    is_layout_lvc      = wa_layo
    it_fieldcat_lvc    = it_fcat
  TABLES
    t_outtab           = <dyn_table>
  EXCEPTIONS
    program_error      = 1
    OTHERS             = 2.
IF sy-subrc <> 0.
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

*&---------------------------------------------------------------------*
*&      Form  frm_add_fcat
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->VALUE1     text
*      -->VALUE2     text
*      -->VALUE3     text
*      -->VALUE4     text
*----------------------------------------------------------------------*
FORM frm_add_fcat USING value1 value2 value3 value4.
  wa_fcat-fieldname = value1.
  wa_fcat-inttype = value2.
  wa_fcat-reptext = value3.
  wa_fcat-intlen   = value4.
  APPEND wa_fcat TO it_fcat.
  CLEAR: wa_fcat.
ENDFORM.                    "frm_add_fcat

运行结果:

选择画面上输入alv显示的列数目,

2017-03-06_10-11-07

&amp;lt;img class="alignnone size-full wp-image-3491" src="http://www.baidusap.com/wp-content/uploads/2017-03-06_10-11-07.png" alt="2017-03-06_10-11-07" width="461" height="172" /&amp;gt;

运行后,

2017-03-06_10-11-39

&amp;lt;img class="alignnone size-full wp-image-3492" src="http://www.baidusap.com/wp-content/uploads/2017-03-06_10-11-39.png" alt="2017-03-06_10-11-39" width="443" height="229" /&amp;gt;

以上。

转载于:https://www.cnblogs.com/datie/p/11435674.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值