欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

可手工拖拽alv行记录的实例

发布时间:2025/3/20 编程问答 51 豆豆
生活随笔 收集整理的这篇文章主要介绍了 可手工拖拽alv行记录的实例 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
程序代码:
  • *Structure declaration for T016T
  • TYPES : BEGIN OF ty_t016t,
  •          brsch TYPE brsch,
  •          brtxt TYPE text1_016t,
  •          spras TYPE spras,
  •          END OF ty_t016t.
  • *Work area and internal table for  T016T
  • DATA : it_t016t TYPE STANDARD TABLE OF ty_t016t,
  •        wa_t016t TYPE ty_t016t.
  • *class declaration
  • CLASS lcl_objdragdropapp DEFINITION DEFERRED.
  • *data declarations for ALV
  • DATA:   c_dragdropapp TYPE REF TO lcl_objdragdropapp,
  •         c_dockingcont TYPE REF TO cl_gui_docking_container,
  •         c_alv TYPE REF TO cl_gui_alv_grid,
  • * reference variable to CL_DRAGDROP:
  •         c_dragdropalv TYPE REF TO cl_dragdrop,
  •         it_layout TYPE lvc_s_layo,
  •         it_fcat  TYPE lvc_t_fcat.            "Field catalogue
  • *declarations for handle event
  • DATA:   effect TYPE i,
  •         handle_alv TYPE i.
  • *initialization event
  • INITIALIZATION.
  • *start of selection event
  • START-OF-SELECTION.
  • *select data
  •   PERFORM fetch_data.
  • *ALV output
  •   PERFORM alv_output.
  • * Class definitions and method implementation for drag and drop
  • CLASS lcl_dragdrop DEFINITION.
  •   PUBLIC SECTION.
  •     DATA: wa TYPE ty_t016t,
  •           index TYPE i.   "Index of Line to be moved
  • ENDCLASS.                    "LCL_DRAGDROP DEFINITION
  • *Application class definition
  • CLASS lcl_objdragdropapp DEFINITION.
  •   PUBLIC SECTION.
  •     METHODS:
  • *Handling Event Drag
  •       handle_alv_drag
  •         FOR EVENT ondrag
  •         OF cl_gui_alv_grid
  •         IMPORTING e_row e_column e_dragdropobj,
  • *Handling event DROP
  •       handle_alv_drop
  •         FOR EVENT ondrop
  •         OF cl_gui_alv_grid
  •         IMPORTING e_row e_column e_dragdropobj.
  • ENDCLASS.                    "LCL_objdragdropapp DEFINITION
  • *Application class implementation
  • CLASS lcl_objdragdropapp IMPLEMENTATION.
  • *  OnDrag event is used to 'fetch' information from the drag source.
  •   METHOD handle_alv_drag.
  •     DATA: dataobj TYPE REF TO lcl_dragdrop,
  •           line TYPE ty_t016t.
  • * Read dragged row
  •     READ TABLE it_t016t INDEX e_row-index INTO line.
  • * create and fill dataobject for events ONDROP
  •     CREATE OBJECT dataobj.
  • * Remembering row index to move a line
  •     MOVE e_row-index TO dataobj->index.
  • * store the dragged line.
  •     READ TABLE it_t016t INTO dataobj->wa INDEX e_row-index.
  • * Assigning data object to the refering event parameter
  •     e_dragdropobj->object = dataobj.
  •   ENDMETHOD.                    "HANDLE_ALV_DRAG
  • *Event handler for event 'OnDrop'. This event is used
  • *to use your dragged information in combination with your drop source.
  •   METHOD handle_alv_drop.
  •     DATA: dataobj TYPE REF TO lcl_dragdrop,
  •           drop_index TYPE i,
  •           stable TYPE lvc_s_stbl.
  • * Refresh Alv Grid Control without scrolling
  •     stable-row = 'X'.
  •     stable-col = 'X'.

  • * Catch-Statement to ensure the drag&drop-Operation is aborted properly.
  •     CATCH SYSTEM-EXCEPTIONS move_cast_error = 1.
  •       dataobj ?= e_dragdropobj->object.
  •       DELETE it_t016t INDEX dataobj->index.
  •       INSERT dataobj->wa INTO it_t016t INDEX e_row-index.
  • *Refreshing the ALV
  •       CALL METHOD c_alv->refresh_table_display
  •         EXPORTING
  •           i_soft_refresh = 'X'
  •           is_stable      = stable.
  •     ENDCATCH.
  •     IF sy-subrc <> 0.
  • * If anything went wrong aborting the drag and drop operation:
  •       CALL METHOD e_dragdropobj->abort.
  •     ENDIF.
  •   ENDMETHOD.                    "HANDLE_ALV_DROP
  • ENDCLASS.                    "LCL_objdragdropapp IMPLEMENTATION
  • *&---------------------------------------------------------------------*
  • *&      Form  alv_output
  • *&---------------------------------------------------------------------*
  • *       text
  • *----------------------------------------------------------------------*
  • *  -->  p1        text
  • *  <--  p2        text
  • *----------------------------------------------------------------------*
  • FORM alv_output .
  •   CALL SCREEN 600.

  • ENDFORM.                    " alv_output
  • ** Calling the ALV screen with custom container
  • *On this statement double click  it takes you to the screen painter SE51.
  • *Enter the attributes
  • *Create a Custom container and name it CC_CONT and OK code as OK_CODE.
  • *Save check and Activate the screen painter.
  • *Now a normal screen with number 600 is created which holds the ALV grid.
  • * PBO of the actual screen ,Here we can give a title and customized menus
  • *&---------------------------------------------------------------------*
  • *&      Module  STATUS_0600  OUTPUT
  • *&---------------------------------------------------------------------*
  • *       text
  • *----------------------------------------------------------------------*
  • MODULE status_0600 OUTPUT.
  • *  SET PF-STATUS 'xxxxxxxx'.
  • *  SET TITLEBAR 'xxx'.
  •   IF c_alv IS INITIAL.
  •     PERFORM alv_controls.
  •   ENDIF.
  • ENDMODULE.                 " STATUS_0600  OUTPUT
  • *&---------------------------------------------------------------------*
  • *&      Form  alv_CONTROLS
  • *&---------------------------------------------------------------------*
  • *       text
  • *----------------------------------------------------------------------*
  • *  -->  p1        text
  • *  <--  p2        text
  • *----------------------------------------------------------------------*
  • FORM alv_controls.
  • * create docking container for alv control
  •   CREATE OBJECT c_dockingcont
  •     EXPORTING
  •         dynnr = '600'
  •         extension = 300
  •         side = cl_gui_docking_container=>dock_at_top.

  • * create alv control
  •   CREATE OBJECT c_alv
  •      EXPORTING i_parent = c_dockingcont.
  • * create the application object to handle the ABAP Objects Events
  •   CREATE OBJECT c_dragdropapp.
  • * Events alv control
  • *For Dragging
  •   SET HANDLER c_dragdropapp->handle_alv_drag FOR c_alv.
  • *For Dropping
  •   SET HANDLER c_dragdropapp->handle_alv_drop FOR c_alv.
  • * build tree nodes for drag&drop
  •   PERFORM build_handle.
  • * Fieldcatalogue for ALV
  •   PERFORM alv_build_fieldcat.
  • * ALV attributes FOR LAYOUT
  •   PERFORM alv_report_layout.
  • * Call ALV GRID
  •   CALL METHOD c_alv->set_table_for_first_display
  •     EXPORTING
  •       is_layout                     = it_layout
  •     CHANGING
  •       it_outtab                     = it_t016t
  •       it_fieldcatalog               = it_fcat
  •     EXCEPTIONS
  •       invalid_parameter_combination = 1
  •       program_error                 = 2
  •       too_many_lines                = 3
  •       OTHERS                        = 4.
  •   IF sy-subrc <> 0.
  •     MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  •                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  •   ENDIF.
  • ENDFORM.                               "ALV_CONTROLS
  • *&---------------------------------------------------------------------*
  • *&      Form  build_handle
  • *&---------------------------------------------------------------------*
  • *       text
  • *----------------------------------------------------------------------*
  • *  -->  p1        text
  • *  <--  p2        text
  • *----------------------------------------------------------------------*
  • FORM build_handle.

  • * define a drag & Drop behaviour for the whole grid
  •   CREATE OBJECT c_dragdropalv.
  •   effect = cl_dragdrop=>move + cl_dragdrop=>copy.
  •   CALL METHOD c_dragdropalv->add
  •     EXPORTING
  •       flavor     = 'Line'
  •       dragsrc    = 'X'
  •       droptarget = 'X'
  •       effect     = effect.
  • *getting the handle for drag and drop
  •   CALL METHOD c_dragdropalv->get_handle
  •     IMPORTING
  •       handle = handle_alv.

  • ENDFORM.                               " build_handle
  • *&---------------------------------------------------------------------*
  • *&      Form  fetch_data
  • *&---------------------------------------------------------------------*
  • *       text
  • *----------------------------------------------------------------------*
  • *  -->  p1        text
  • *  <--  p2        text
  • *----------------------------------------------------------------------*
  • FORM fetch_data .
  • * select and display data from t016
  •   SELECT brtxt brsch spras FROM t016t INTO CORRESPONDING FIELDS OF TABLE it_t016t
  •   WHERE spras = 'EN'.

  • ENDFORM.                    " fetch_data
  • *&---------------------------------------------------------------------*
  • *&      Form  alv_report_layout
  • *&---------------------------------------------------------------------*
  • *       text
  • *----------------------------------------------------------------------*
  • *  -->  p1        text
  • *  <--  p2        text
  • *----------------------------------------------------------------------*
  • FORM alv_report_layout .
  •   it_layout-grid_title = 'ALV Drag Drop'.
  • * provide handle to alv control to all rows for same drag & drop behaviour
  •   it_layout-s_dragdrop-row_ddid = handle_alv.

  • ENDFORM.                    " alv_report_layout
  • *&---------------------------------------------------------------------*
  • *&      Form  alv_build_fieldcat
  • *&---------------------------------------------------------------------*
  • *       text
  • *----------------------------------------------------------------------*
  • *  -->  p1        text
  • *  <--  p2        text
  • *----------------------------------------------------------------------*
  • FORM alv_build_fieldcat .
  •   DATA lv_fldcat TYPE lvc_s_fcat.
  •   CLEAR lv_fldcat.
  •   lv_fldcat-row_pos   = '1'.
  •   lv_fldcat-col_pos   = '1'.
  •   lv_fldcat-fieldname = 'BRSCH'.
  •   lv_fldcat-tabname   = 'IT_T016T'.
  •   lv_fldcat-outputlen = 8.
  •   lv_fldcat-scrtext_m = 'Industry'.
  •   APPEND lv_fldcat TO it_fcat.
  •   CLEAR lv_fldcat.
  •   lv_fldcat-row_pos   = '1'.
  •   lv_fldcat-col_pos   = '2'.
  •   lv_fldcat-fieldname = 'BRTXT'.
  •   lv_fldcat-tabname   = 'IT_T016T'.
  •   lv_fldcat-outputlen = 15.
  •   lv_fldcat-scrtext_m = 'Description'.
  •   APPEND lv_fldcat TO it_fcat.
  •   CLEAR lv_fldcat.

  • ENDFORM.                    " alv_build_fieldcat
  • * PAI module of the screen created. In case we use an interactive ALV or
  • *for additional functionalities we can create OK codes
  • *and based on the user command we can do the coding.
  • *&---------------------------------------------------------------------*
  • *&      Module  USER_COMMAND_0600  INPUT
  • *&---------------------------------------------------------------------*
  • *       text
  • *----------------------------------------------------------------------*
  • MODULE user_command_0600 INPUT.
  • ENDMODULE.                 " USER_COMMAND_0600  INPUT
  • 复制代码
    程序执行效果:
     
    alv行记录被拖拽之后的效果
     

    总结

    以上是生活随笔为你收集整理的可手工拖拽alv行记录的实例的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。