ALV详解:Function ALV(一)

ALV详解:Function ALV(一)
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接:http://www.cnblogs.com/jiangzhengjun/p/4291337.html

Function ALV

ALV:SAPListViewer

ALV显示格式分为GRID及LIST两种模式,一个以网格显示,另一个以表格显示,两者都有工具栏稍有不同

Layout结构

Layout主要用于设置ALV整体输出格式,为ALV可选项参数。属于类型池 TYPE-POOLS:SLIS

TYPE-POOLS:slis.
DATA: layout TYPE slis_layout_alv.

Layout结构所定义的所有字段如下(各字段详细使用说明,可参考REUSE_ALV_GRID_DISPLAY的 is_layout参数文档说明):

no_colhead() ) ) ) ) ) ) ) )     ) ) ) ) ) ) ) type c,         " Text for item button
         countfname type lvc_fname,

*        Display options
colwidth_optimize() ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) type c, "ACC: Switch from FullGrid to List

Fieldcat结构

Fieldcat主要用于ALV数据显示结构的定义,包括具体的栏位名称、类型、各字段的输出格式(与Layout不一样的是输出格式只针对某个字段),为ALV必选参数

TYPE-POOLS:slis.
DATA: fieldcatTYPE slis_t_fieldcat_alv WITH HEADER LINE.

Fieldcat结构所定义的所有字段如下(各字段详细使用说明,可参考REUSE_ALV_GRID_DISPLAY的 it_fieldcat参数文档说明):

row_pos        )    )    )       )         )        )      )    )        )       )     )     )时不输出,所以不输出零时应该最好同时设置lzero = sapce与no_zero = X,相反如果要输出,则应同时设置lzero = X 与no_zero = space
         no_convext()  )   )   )      )      )        type c,        " technical field该字段为技术字段:设置为技术列的列将不会再显示出来,即使是在布局设置里也是看不到的
         outputlen      like dd03p-outputlen,列的字符输出宽度
         offset         type dd03p-outputlen,     " offset

调整输出列抬头的文本:文本可以随着用户调整列的宽度而变化,其文本即是在对应data element中定义的,如果需要定制,则可以指定以下字段
seltext_l )     type c,        " (S)hort (M)iddle (L)ong设置以长、中还是短名称来显示,取值分别为 S、M、L。直接指定文本显示为长文本、中、还是短文本, 指定这个字段后则会固定下来,不会随着用户的宽度调整变化.
reptext_ddic   like dd03p-reptext,   " heading (ddic),(header) Analogous(相似) to the Data element main header

rollname       like dd03p-rollname,F1帮助需参照的DataElement,在ALV的显示界面将鼠标放到该字段的位置后按F1会弹出该字段的说明。另外,可以不指明字段的描述(如seltext_l、seltext_m、seltext_s),函数会自动将字段的描述显示为该参照的数据元素

下面datatype两个属性在字段如果是金额或P小数(数量)类型时,需要对datatype此属性进行设置,否则,如果不设置时,在修改对应单元格内容时,会自动将你所输入的数除100,即小数点提前两位;并且如果是数量类型,除了设置datatype外,inttype也需要进行设置,且为 C,具体实现请参考这里
datatypelike dd03p-datatype,
inttype like dd03p-inttype,
         intlen         like dd03p-intlen,
         lowercase      like dd03p-lowercase,

ref_fieldname  )   type c,     " decimals in write statement控制小数点的位数
         text_fieldname type slis_fieldname,         
         ddic_outputlen like dd03p-outputlen,

key_sel()     )      )    )      )       )        )     type c,        " hotspot设置字段内容下面是否有热点(有下划线,可点击,单击即可触发相应事件)

ALV相关函数

REUSE_ALV_GRID_DISPLAY:Grid 格式的ALV

REUSE_ALV_LIST_DISPLAY: LIST格式的 ALV

REUSE_ALV_FIELDCATALOG_MERGE:根据程序中的数据内表结构,来自动生成FIELDCAT[]内表,会根据内表结构所参照的词典类型来自动完成如表标题字段名的生成,得到大概的FIELDCAT[]后,可以再根据特殊情况再修改FIELDCAT[]内表,这样可以大大减少FIELDCAT[]内表的创建工作。注:程序中用来输出的内表结构中的每个字段都要参考了数据字典中的Data element,否则无法获取字段的相关信息,此时在自动构建FIELDCAT后再手动对无参照字典类型的字段进行手工设置

注:还有一种以 LVC结尾的ALV函数REUSE_ALV_GRID_DISPLAY_LVC,此函数中引用到的类型大部分都不再从类型池slis 中来引用(TYPE-POOLS:slis.),而是直接引用字典中已定义好的表或结构类型,这种函数属于新性函数,与面向对象的CL_GUI_ALV_GRID生成的ALV参数类型上基本相同,所以以后一般如果使用函数方式来产生ALV,推荐使用REUSE_ALV_GRID_DISPLAY_LVC函数,而非REUSE_ALV_GRID_DISPLAY函数因为这样方便修改面向对象方式的ALV

REUSE_ALV_GRID_DISPLAY与REUSE_ALV_LIST_DISPLAY函数的参数基本相同:

CALLFUNCTION'REUSE_ALV_GRID_DISPLAY'
* EXPORTING
*   I_INTERFACE_CHECK                 = ' '
*   I_BYPASSING_BUFFER                = ' '
*   I_BUFFER_ACTIVE                   = ' '
*   I_CALLBACK_PROGRAM                = ' '回调函数、待输出数据内表所在的程序名,一般为本程序,但一般不要直接使用SY-REPID系统变量,因为可能出现多层次调用(一个程序调用另一程序,形成调用链时)SY-REPID可能不是最后想要的程序
*   I_CALLBACK_PF_STATUS_SET          = ' '设置工具栏
*   I_CALLBACK_USER_COMMAND           = ' '工具栏按钮或数据行事件触发时所要调用的Form
*   I_CALLBACK_TOP_OF_PAGE            = ' '
*   I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
*   I_CALLBACK_HTML_END_OF_LIST       = ' '
*   I_STRUCTURE_NAME                  =如果输出内表的结构参照的就是表结构,则可以不用指定fieldcat,直接使用这个词典结构,函数会自动根据此结构来生成fieldcat。在实际业务中一般是从多个表读取数据,因此直接使用字典结构作为字段目录的情况不常见;另外,可与IT_FIELDCAT混合使用,手动的IT_FIELDCAT级别优先
*   I_BACKGROUND_ID                   = ' '设置报表背景图片?
*   I_GRID_TITLE                      = ALV标题名
*   I_GRID_SETTINGS                   =设置(打印、网格中的数据同步更新到输出数据内表)
*   IS_LAYOUT                         = ALV Layout
*   IT_FIELDCAT                       = FieldCat配置
*   IT_EXCLUDING                      =
*   IT_SPECIAL_GROUPS                 =
*   IT_SORT                           =
*   IT_FILTER                         =
*   IS_SEL_HIDE                       =
*   I_DEFAULT                         = 'X'用户是否可以设置默认的布局变式(即是否可以将某个布局变式设置为默认的布局): 'X' 可以定义默认布局,SPACE 不可以定义默认布局ALV详解:Function ALV(一)
*   I_SAVE                            = ' '保存表格布局:'X' 只能保存为全局标准变式,'U' 只能保存特定用户变式,'A'都可以保存,SPACE不能保存变式
*   IS_VARIANT                        =
*   IT_EVENTS                         =
*   IT_EVENT_EXIT                     =
*   IS_PRINT                          =从后端开始打印的参数
*   IS_REPREP_ID                      =
*   I_SCREEN_START_COLUMN             = 0
*   I_SCREEN_START_LINE               = 0
*   I_SCREEN_END_COLUMN               = 0
*   I_SCREEN_END_LINE                 = 0
*   I_HTML_HEIGHT_TOP                 = 0
*   I_HTML_HEIGHT_END                 = 0
*   IT_ALV_GRAPHICS                   =
*   IT_HYPERLINK                      =
*   IT_ADD_FIELDCAT                   =
*   IT_EXCEPT_QINFO                   =
*   IR_SALV_FULLSCREEN_ADAPTER        =
* IMPORTING
*   E_EXIT_CAUSED_BY_CALLER           =
*   ES_EXIT_CAUSED_BY_USER            =
TABLES
t_outtab                          =需要显示的数据内表
* EXCEPTIONS
*   PROGRAM_ERROR                     = 1
*   OTHERS                            = 2

CALLFUNCTION'REUSE_ALV_LIST_DISPLAY'
* EXPORTING
*   I_INTERFACE_CHECK              = ' '
*   I_BYPASSING_BUFFER             =
*   I_BUFFER_ACTIVE                = ' '
*   I_CALLBACK_PROGRAM             = ' '

*   I_CALLBACK_PF_STATUS_SET       = ' '
*   I_CALLBACK_USER_COMMAND        = ' '

*   I_STRUCTURE_NAME               =

*   IS_LAYOUT                      =
*   IT_FIELDCAT                    =
*   IT_EXCLUDING                   =
*   IT_SPECIAL_GROUPS              =
*   IT_SORT                        =
*   IT_FILTER                      =
*   IS_SEL_HIDE                    =
*   I_DEFAULT                      = 'X'

*   I_SAVE                         = ' '

*   IS_VARIANT                     =
*   IT_EVENTS                      =
*   IT_EVENT_EXIT                  =
*   IS_PRINT                       =
*   IS_REPREP_ID                   =
*   I_SCREEN_START_COLUMN          = 0
*   I_SCREEN_START_LINE            = 0
*   I_SCREEN_END_COLUMN            = 0
*   I_SCREEN_END_LINE              = 0
*   IR_SALV_LIST_ADAPTER           =

*   IT_EXCEPT_QINFO                =
*   I_SUPPRESS_EMPTY_DATA          = ABAP_FALSE
* IMPORTING
*   E_EXIT_CAUSED_BY_CALLER        =
*   ES_EXIT_CAUSED_BY_USER         =
TABLES
  t_outtab                       =
* EXCEPTIONS
*   PROGRAM_ERROR                  = 1
*   OTHERS                         = 2

ALV详解:Function ALV(一)

简单实例

.
  lt_stock-color = 'C300'.
  APPEND lt_stock .
ENDFORM.

ALV详解:Function ALV(一)

Fieldcat动态创建

通过编程创建

注:通过此种方式实现时,显示内表中的所有列都会输出,只是那些没有参照字典中的类型字段没有字段标题名而已,这需要在FieldCat生产后,通过代码修改即可。

.
  lt_stock-color = 'C300'.
  APPEND lt_stock .

ENDFORM.

ALV详解:Function ALV(一)

通过REUSE_ALV_FIELDCATALOG_MERGE函数创建

.
  T_STOCK-color = 'C300'.
  APPEND T_STOCK .
ENDFORM.

ALV详解:Function ALV(一)

自定义ALV工具条

默认输出的ALV已供了很多标准的按钮了:

ALV详解:Function ALV(一)

ALV详解:Function ALV(一)

自定义ALV工具栏有两种方式:第一处是自已创建一个GUI Status(通常作法是从SLVC_FULLSCREEN函数组中的拷贝STANDARD_FULLSCREENGui Status,再在此基础之上新增按钮即可);第二种是调用系统已定义好的标准ALV工具栏;

系统已定义好的标准ALV GUI Status 在程序SAPLKKBL中,可以通过SET PF-STATUS … OF PROGRAM语句直接来调用,如:

SET PF-STATUS 'STANDARD_FULLSCREEN' OF PROGRAM 'SAPLKKBL'.

SAPLKKBL程序中定义的系统标准的ALV GUI Status有以下几种:

l  STDPOPBX_FULLSCREEN

l  STDPOPUP_FULLSCREEN

l  STANDARD_FULLSCREEN     与SLVC_FULLSCREEN函数组中的STANDARD_FULLSCREEN是一样的,都是标准的(函数组SALV中的STANDARDstatus也是标准的)

l  STDPOPBX_FULLSCREEN

l  STDPOPUP_FULLSCREEN

l  STANDARD_FULLSCR_HR

l  STDPOPBX_FS_LIGHT

l  STDPOPUP_FS_LIGHT

l  STD_LIGHT_FULLSCREEN

这些工具条中的按钮都已经设置了Function Code,且都是保留字,这些Funcode都已经在ALV Guid控件中实现,不需得新分配Funcode功能代码,按钮默认功能码:

ALV详解:Function ALV(一)

ALV详解:Function ALV(一)

ALV中自定义工具栏需要通过REUSE_ALV_GRID_DISPLAY函数的I_CALLBACK_PF_STATUS_SET参数,传递设置GUI Status的Form的名称,在此Form使用SET PF-STATUS语句来重新定义ALV工具栏,该Form接口如下:
FORMset_pf_status USING rt_extab TYPE slis_t_extab

rt_extab是要排除掉的按钮,根据Funcode来排除。另外,也可以通过REUSE_ALV_GRID_DISPLAY函数IT_EXCLUDING内表参数来直接排除哪些预置按钮不可用,IT_EXCLUDING内表结构只有一个fcode字段,即根据保留的FunCode即可disabled掉。

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program = sy-repid
      it_fieldcat        = fieldcat[]
     I_CALLBACK_PF_STATUS_SET= 'SET_PF_STATUS'
    TABLES
      t_outtab           = t_stock1.

FORMset_pf_status USING rt_extab TYPE slis_t_extab.
  "去激活Function code为&ETA的详情按钮
 APPEND '&ETA'  TO  rt_extab.
  SET PF-STATUS'STANDARD_FULLSCREEN' OF PROGRAM 'SAPLKKBL' EXCLUDING
rt_extab.
ENDFORM.

如果没有重定义ALV工具栏,则会默认使用函数组SLVC_FULLSCREEN中定义的STANDARD_FULLSCREEN工具条

快速拷贝GUI Status

在自定义工具栏时,通常从标准GUI Status上拷贝出来,再新加按钮。

函数组 SLVC_FULLSCREEN中定义的STANDARD_FULLSCREEN GUI Status拷贝方式如下,通过 SE41可以快速拷贝:

ALV详解:Function ALV(一)

如果不是ALV,是Write输出时,拷贝:

ALV详解:Function ALV(一)

ALV事件

ALV触发的事件(如双击某行数据、单击热点、点ALV工具栏上的自定义的按钮时),会回调I_CALLBACK_USER_COMMAND参数指定的Form,接口如下:

FORM user_command  USING r_ucomm LIKE sy-ucomm
                                rs_selfield TYPE slis_selfield.

Parameter R_UCOMM 为触发的function code

结构 RS_SELFIELD 包括了以下字段:

  • tabname: Name of the internal output table 输出内表名
  • tabindex : Index of the internal output table            数据行索引
  • fieldname: Field name                                                     光标所在单元格所对应的的字段名
  • endsum: Cursor is located on the totals line
  • sumindex : If >0, the cursor is located on a subtotals line
  • value    : Value of the field on the list                        光标所在单元格的值
  • refresh: (Exporting) List should be set up again为X时,当用户在显式界面上对数据进行修改时,同时内表中的数据也随之刷新
  • col_stable:(Exporting) Keep column position when list is set up again
  • row_stable:(Exporting) Keep row position when list is set up again
  • exit     :(Exporting) Exit list (and ALV)
  • after_action : Call after standard action execution, before list setup

) WITH '事件触发时当前行:' rs_selfield-tabindex.
ENDFORM.

所支持事件

ALV可触发的事件可用REUSE_ALV_EVENTS_GET 函数来获得,输出一个内表,类型是slis_t_event,行项为slis_alv_event,包含两个字段:一个为事件名,另一个是事件处理的FORM名

:表示获取的是通过函数REUSE_ALV_LIST_DISPLAY产生的ALV所支持的事件
   
  IMPORTING
    et_events   = i_events[].

LOOP AT i_events.
  WRITE:/  i_events-name,i_events-form.
ENDLOOP.

ALV详解:Function ALV(一)

触发USER_COMMAND事件时,会调用以下签名的Form:

触发PF_STATUS_SET事件时,会调用以下签名的Form(其中pf_status_set名是自定义的,非固定为 pf_status_set):
FORM pf_status_set USING rt_extab TYPE slis_t_extab.

事件名

何时触发

触发时所回调Form的签名要求

回调方式

USER_COMMAND

用户点击工具栏中自定义按钮、预置按钮(需通过REUSE_ALV_GRID_DISPLAY函数的IT_EVENT_EXIT参数来特殊处理才会回调指定的Form)、数据行双击、单元格热点点击等一系列用户操作

FORMuser_command USING r_ucomm  LIKE sy-ucomm rs_selfield TYPE slis_selfield.

(其中user_command名是自定义的,而不是固定为 user_command)

1.     通过REUSE_ALV_GRID_DISPLAY函数的I_CALLBACK_USER_COMMAND参数接口回调

2.     通过REUSE_ALV_GRID_DISPLAY函数的IT_EVENTS参数接口回调

PF_STATUS_SET

ALV工具栏显示前,可自定义工具条

FORMpf_status_set USING rt_extab TYPE slis_t_extab

(其中 pf_status_set 名是自定义的,而不是固定为  pf_status_set )

1.      通过REUSE_ALV_GRID_DISPLAY函数的I_CALLBACK_PF_STATUS_SET参数接口回调

2.      通过REUSE_ALV_GRID_DISPLAY函数的IT_EVENTS参数接口回调

TOP_OF_PAGE

页眉定制

无参数

通过REUSE_ALV_GRID_DISPLAY函数的IT_EVENTS参数接口回调

更多事件详细介绍可参考REUSE_ALV_GRID_DISPLAY函数的IT_EVENTS参数文档说明
ALV详解:Function ALV(一)

ALV详解:Function ALV(一)
),"事件触发时需回调的Form名
      end of slis_alv_event.

工具条预置按钮回调出口IT_EVENT_EXIT

点击ALV默认提供的工具栏按钮时,不会回调I_CALLBACK_USER_COMMAND = 'USER_COMMAND'参数中指定的Form ,因为那些按钮所对应的功能代码已被设为保留Funcode了,如果要想在点击这些标准的按钮时也回调指定的Form,可通过REUSE_ALV_GRID_DISPLAY函数的IT_EVENT_EXIT参数实现的,可以向IT_EVENT_EXIT参数内表填充需要被拦截的保留Funcode,及在是执行对应功能代码之前还是之后调用,具体应用请参考这里

DATA: event_exit TYPE slis_t_event_exit WITH HEADER LINE.
  event_exit-ucomm = '&OAD'."此Funcode为点击AlV工具栏上的选择布局按钮时ALV详解:Function ALV(一)会被USER_COMMAND Form拦截
  event_exit-after = 'X'.
  APPEND event_exit.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
     i_callback_program= sy-repid
      it_fieldcat        = fieldcat[]
     i_callback_user_command= 'USER_COMMAND'
      IT_EVENT_EXIT = event_exit[]
    TABLES
      t_outtab           = gt_result.
FORMuser_command  USING r_ucomm LIKE sy-ucomm
                                rs_selfield TYPE slis_selfield.

...
ENDFORM.

颜色

注意:

颜色设置中有优先级顺序,他们是单元格中更改颜色的方法,则列的颜色会被行的颜色覆盖掉,而行的颜色又会被单元格的颜色覆盖掉,最终只会显示出单元格的颜色。

如果这列被设置为关键列,就是LS_FCAT-KEY = 'X' ,那么颜色设置就不会起作用

行颜色

ALV中的每行数据颜色是通过LayOut来控制的。需要在显示输出内表结构中增加一列字段,用来存储数据行的颜色

.
        CONCATENATE 'C' c1 c2 c3 INTO gt_data-color.
        gt_data-val1 = gt_data-color.
        gt_data-val2 = gt_data-color.
        APPEND gt_data.
      ENDDO.
    ENDDO.
  ENDDO.
ENDFORM.

颜色值定义为4位字符,首位固定为字母“C”,第2位为颜色,由0~7表示,不同的数字表示不同的颜色属性,如:

0 = background color                  1 = Gray-blue     2 = Light gray    3 = yellow

4 = blue-gray                                    5 = green                                  6 = red                              7 = orange

第3位表示输出文字是否高亮显示,由0~1表示,为1时表示高亮显示。位测试了一下,基本上0~9颜色都差不多,唯一就是当取值为1时,底色又回到了灰色(且只是在第3位为0时才有此效果)。

ALV中的颜色是由4位数组成:'C'+COL+INT+INV

*** Structure for colors
types: begin of slis_color,
         col type i,
         int type i,
         inv type i,
       end of slis_color.

1位:固定取值为C

第2位COL:颜色值,取值为0~7

第3位、1。1表示加深显示

第4位、1。为1时表示设置的是前景色,即输出字符本身的颜色位为0时才有效?)

以下是各种颜色值测试表:

ALV详解:Function ALV(一)ALV详解:Function ALV(一)ALV详解:Function ALV(一)ALV详解:Function ALV(一)

ALV详解:Function ALV(一)ALV详解:Function ALV(一)ALV详解:Function ALV(一)ALV详解:Function ALV(一)

ALV详解:Function ALV(一)ALV详解:Function ALV(一)

列颜色

ALV详解:Function ALV(一)

.
  APPEND gt_data.
ENDFORM.

单元格颜色

除了可为整行设置行颜色外,每个单元格(不只是整列)的颜色也是可以单独进行设置。当然既然可以给单元格设置颜色,则整列相同颜色也是可以采用此方式来设置的

ALV详解:Function ALV(一)

.
          gt_color-fieldname = 'VAL2'."需进行颜色设置的列名(已具体到单元格)
          CONCATENATE 'col=' c1 ` ` 'int=' c2 ` `  'inv=0'  INTO gt_data-val2 .
      ENDCASE.
      APPEND gt_color.
    ENDDO.
    "设置每行数据中单元格的颜色内表
    gt_data-colortable = gt_color[].
    gt_data-val3 = '无颜色'.
    APPEND gt_data.
    CLEAR:gt_color,gt_color[].
  ENDDO.
ENDFORM.

可编辑

可以通过layout(slis_layout_alv)中的edit参数来设置整个网格(所有单元格)是否可编辑:

DATA: gs_layout TYPE slis_layout_alv.
gs_layout-edit = 'X'.

如果只想让某列(一整列)可修改,而不是整个网格,则可对fieldcat中的edit参数来设置某列是否可编辑:

DATA: gt_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE.
gt_fieldcat-edit = 'X'.

如果想对某些单元格进行设置,在满足一定条件的单元格才能修改,此时只能使用以LVC结尾的REUSE_ALV_GRID_DISPLAY_LVC函数,而非REUSE_ALV_GRID_DISPLAY函数:

),
  cellstab TYPE lvc_t_styl,"单元格可编辑控制
  END OF gt_data.
"单元格可编辑控制内表
DATA: gt_cellstab TYPE lvc_t_styl WITH HEADER LINE.

START-OF-SELECTION.
  PERFORM inital.
  DEFINE fill_fdcat.
    clear gt_fieldcat.
    gt_fieldcat-fieldname = &1.
    gt_fieldcat-scrtext_l = &2.
    "设置单元格为可编辑状态:此处设置所有单元格都可编辑
    gt_fieldcat-edit = 'X'.
    append gt_fieldcat.
  END-OF-DEFINITION.

fill_fdcat 'VAL1' '列1'.
  fill_fdcat 'VAL2' '列2'.

gs_layout-stylefname = 'CELLSTAB'."设置可编辑信息
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      is_layout_lvc   = gs_layout
      it_fieldcat_lvc = gt_fieldcat[]
    TABLES
     t_outtab       = gt_data.

FORM inital .
  gt_data-val1 = 'cell1'.
  gt_data-val2 = 'cell2'.
  gt_cellstab-fieldname = 'VAL1'.
  "将原本可编辑的单元格切换到不可编辑样式。注:这里
  "只是样式的切换,不能仅仅使用cl_gui_alv_grid=>mc_style_enabled来将单元格设置为
  "可编辑状态,单元格真正是否可编辑是由fieldcat-edit或layout-edit来决定的,而仅
  "设置为cl_gui_alv_grid=>mc_style_enabled是不可编辑的
  gt_cellstab-style = cl_gui_alv_grid=>mc_style_disabled.
  APPEND gt_cellstab.
  gt_data-cellstab = gt_cellstab[].
  APPEND gt_data.
ENDFORM.

上一篇:(1)FluidMoveBehavior 之 ListBox 中详细内容项飞出来


下一篇:JavaScript语法作业