<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Does ALV support multiple Lines Drag &amp; Drop Functionality in Application Development and Automation Discussions</title>
    <link>https://community.sap.com/t5/application-development-and-automation-discussions/does-alv-support-multiple-lines-drag-drop-functionality/m-p/4115729#M983969</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Sap Gurus,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have a requirment where i need to drag multiple lines (TO's) in ALV &amp;amp; Drop in a Queue.&lt;/P&gt;&lt;P&gt;I am sucessfull in dragging &amp;amp; dropping asingle line item into the queue, but am unsuccessfull in dragging multiple lines.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Does ALV support multiple Lines Drag &amp;amp; Drop ?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Any responce is higly appreciated.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks &amp;amp; Regards,&lt;/P&gt;&lt;P&gt;Sridhar.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 25 Jun 2008 14:04:12 GMT</pubDate>
    <dc:creator>Former Member</dc:creator>
    <dc:date>2008-06-25T14:04:12Z</dc:date>
    <item>
      <title>Does ALV support multiple Lines Drag &amp; Drop Functionality</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/does-alv-support-multiple-lines-drag-drop-functionality/m-p/4115729#M983969</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Sap Gurus,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have a requirment where i need to drag multiple lines (TO's) in ALV &amp;amp; Drop in a Queue.&lt;/P&gt;&lt;P&gt;I am sucessfull in dragging &amp;amp; dropping asingle line item into the queue, but am unsuccessfull in dragging multiple lines.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Does ALV support multiple Lines Drag &amp;amp; Drop ?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Any responce is higly appreciated.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks &amp;amp; Regards,&lt;/P&gt;&lt;P&gt;Sridhar.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 25 Jun 2008 14:04:12 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/does-alv-support-multiple-lines-drag-drop-functionality/m-p/4115729#M983969</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2008-06-25T14:04:12Z</dc:date>
    </item>
    <item>
      <title>Re: Does ALV support multiple Lines Drag &amp; Drop Functionality</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/does-alv-support-multiple-lines-drag-drop-functionality/m-p/4115730#M983970</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Sriddy,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I'm not sure about ALV, but you can certainly do it with the TREE control. Look at sample program RSDEMO_DRAG_DROP_TREE_MULTI.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Cheers&lt;/P&gt;&lt;P&gt;Graham Robbo&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 25 Jun 2008 22:51:58 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/does-alv-support-multiple-lines-drag-drop-functionality/m-p/4115730#M983970</guid>
      <dc:creator>GrahamRobbo</dc:creator>
      <dc:date>2008-06-25T22:51:58Z</dc:date>
    </item>
    <item>
      <title>Re: Does ALV support multiple Lines Drag &amp; Drop Functionality</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/does-alv-support-multiple-lines-drag-drop-functionality/m-p/4115731#M983971</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;check this code:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;REPORT  zalv_dragdrop.*Structure declaration for T016T&lt;/P&gt;&lt;P&gt;TYPES : BEGIN OF ty_t016t,&lt;/P&gt;&lt;P&gt;         brsch TYPE brsch,&lt;/P&gt;&lt;P&gt;         brtxt TYPE text1_016t,&lt;/P&gt;&lt;P&gt;         spras TYPE spras,&lt;/P&gt;&lt;P&gt;         END OF ty_t016t.*Work area and internal table for  T016T&lt;/P&gt;&lt;P&gt;DATA : it_t016t TYPE STANDARD TABLE OF ty_t016t,&lt;/P&gt;&lt;P&gt;       wa_t016t TYPE ty_t016t.*class declaration&lt;/P&gt;&lt;P&gt;CLASS lcl_objdragdropapp DEFINITION DEFERRED.*data declarations for alv&lt;/P&gt;&lt;P&gt;DATA:   c_dragdropapp TYPE REF TO lcl_objdragdropapp,&lt;/P&gt;&lt;P&gt;        c_dockingcont TYPE REF TO cl_gui_docking_container,&lt;/P&gt;&lt;P&gt;        c_alv TYPE REF TO cl_gui_alv_grid,&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;reference variable to CL_DRAGDROP:&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;        c_dragdropalv TYPE REF TO cl_dragdrop,&lt;/P&gt;&lt;P&gt;        it_layout TYPE lvc_s_layo,&lt;/P&gt;&lt;P&gt;        it_fcat  TYPE lvc_t_fcat.            "Field catalogue*declarations for handle event&lt;/P&gt;&lt;P&gt;DATA:   effect TYPE i,&lt;/P&gt;&lt;P&gt;        handle_alv TYPE i.&lt;STRONG&gt;initialization eventINITIALIZATION.&lt;/STRONG&gt;start of selection event&lt;/P&gt;&lt;P&gt;START-OF-SELECTION.*select data&lt;/P&gt;&lt;P&gt;  PERFORM fetch_data.*ALV output&lt;/P&gt;&lt;P&gt;  PERFORM alv_output.* Class definitions and method implementation for drag and drop&lt;/P&gt;&lt;P&gt;CLASS lcl_dragdrop DEFINITION.&lt;/P&gt;&lt;P&gt;  PUBLIC SECTION.&lt;/P&gt;&lt;P&gt;    DATA: wa TYPE ty_t016t,&lt;/P&gt;&lt;P&gt;          index TYPE i.   "Index of Line to be movedENDCLASS.                    "LCL_DRAGDROP DEFINITION*Application class definition&lt;/P&gt;&lt;P&gt;CLASS lcl_objdragdropapp DEFINITION.  PUBLIC SECTION.&lt;/P&gt;&lt;P&gt;    METHODS:&lt;/P&gt;&lt;P&gt;*Handling Event Drag&lt;/P&gt;&lt;P&gt;      handle_alv_drag&lt;/P&gt;&lt;P&gt;        FOR EVENT ondrag&lt;/P&gt;&lt;P&gt;        OF cl_gui_alv_grid&lt;/P&gt;&lt;P&gt;        IMPORTING e_row e_column e_dragdropobj,*Handling event DROP&lt;/P&gt;&lt;P&gt;      handle_alv_drop&lt;/P&gt;&lt;P&gt;        FOR EVENT ondrop&lt;/P&gt;&lt;P&gt;        OF cl_gui_alv_grid&lt;/P&gt;&lt;P&gt;        IMPORTING e_row e_column e_dragdropobj.ENDCLASS.                    "LCL_objdragdropapp DEFINITION*Application class implementation&lt;/P&gt;&lt;P&gt;CLASS lcl_objdragdropapp IMPLEMENTATION.*  OnDrag event is used to 'fetch' information from the drag source.&lt;/P&gt;&lt;P&gt;  METHOD handle_alv_drag.&lt;/P&gt;&lt;P&gt;    DATA: dataobj TYPE REF TO lcl_dragdrop,&lt;/P&gt;&lt;P&gt;          line TYPE ty_t016t.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Read dragged row&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    READ TABLE it_t016t INDEX e_row-index INTO line.* create and fill dataobject for events ONDROP&lt;/P&gt;&lt;P&gt;    CREATE OBJECT dataobj.* Remembering row index to move a line&lt;/P&gt;&lt;P&gt;    MOVE e_row-index TO dataobj-&amp;gt;index.* store the dragged line.&lt;/P&gt;&lt;P&gt;    READ TABLE it_t016t INTO dataobj-&amp;gt;wa INDEX e_row-index.* Assigning data object to the refering event parameter    e_dragdropobj-&amp;gt;object = dataobj.  ENDMETHOD.                    "HANDLE_ALV_DRAG*Event handler for event 'OnDrop'. This event is used&lt;/P&gt;&lt;P&gt;*to use your dragged information in combination with your drop source.  METHOD handle_alv_drop.    DATA: dataobj TYPE REF TO lcl_dragdrop,&lt;/P&gt;&lt;P&gt;          drop_index TYPE i,&lt;/P&gt;&lt;P&gt;          stable TYPE lvc_s_stbl.* Refresh Alv Grid Control without scrolling&lt;/P&gt;&lt;P&gt;    stable-row = 'X'.&lt;/P&gt;&lt;P&gt;    stable-col = 'X'.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Catch-Statement to ensure the drag&amp;amp;drop-Operation is aborted properly.    CATCH SYSTEM-EXCEPTIONS move_cast_error = 1.      dataobj ?= e_dragdropobj-&amp;gt;object.      DELETE it_t016t INDEX dataobj-&amp;gt;index.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      INSERT dataobj-&amp;gt;wa INTO it_t016t INDEX e_row-index.*Refreshing the ALV&lt;/P&gt;&lt;P&gt;      CALL METHOD c_alv-&amp;gt;refresh_table_display&lt;/P&gt;&lt;P&gt;        EXPORTING&lt;/P&gt;&lt;P&gt;          i_soft_refresh = 'X'&lt;/P&gt;&lt;P&gt;          is_stable      = stable.    ENDCATCH.&lt;/P&gt;&lt;P&gt;    IF sy-subrc &amp;lt;&amp;gt; 0.* If anything went wrong aborting the drag and drop operation:      CALL METHOD e_dragdropobj-&amp;gt;abort.    ENDIF.  ENDMETHOD.                    "HANDLE_ALV_DROPENDCLASS.                    "LCL_objdragdropapp IMPLEMENTATION&lt;STRONG&gt;&amp;amp;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*&amp;amp;      Form  alv_output&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;amp;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      text&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="-----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; --&amp;gt;  p1        text&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; &amp;lt;--  p2        text&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="-----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;FORM alv_output .  CALL SCREEN 600.&lt;/P&gt;&lt;P&gt;ENDFORM.                    " alv_output** Calling the ALV screen with custom container&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;On this statement double click  it takes you to the screen painter SE51.&lt;/STRONG&gt;Enter the attributes&lt;/P&gt;&lt;P&gt;*Create a Custom container and name it CC_CONT and OK code as OK_CODE.&lt;/P&gt;&lt;P&gt;*Save check and Activate the screen painter.&lt;/P&gt;&lt;P&gt;*Now a normal screen with number 600 is created which holds the ALV grid.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;PBO of the actual screen ,Here we can give a title and customized menus&lt;STRONG&gt;&amp;amp;---------------------------------------------------------------------&lt;/STRONG&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*&amp;amp;      Module  STATUS_0600  OUTPUT&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;amp;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      text&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="-----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;MODULE status_0600 OUTPUT.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; SET PF-STATUS 'xxxxxxxx'.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; SET TITLEBAR 'xxx'.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  IF c_alv IS INITIAL.&lt;/P&gt;&lt;P&gt;    PERFORM alv_controls.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;ENDMODULE.                 " STATUS_0600  OUTPUT&lt;STRONG&gt;&amp;amp;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*&amp;amp;      Form  alv_CONTROLS&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;amp;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      text&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="-----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; --&amp;gt;  p1        text&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; &amp;lt;--  p2        text&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="-----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;FORM alv_controls.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;create docking container for alv control&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  CREATE OBJECT c_dockingcont&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;        dynnr = '600'&lt;/P&gt;&lt;P&gt;        extension = 300&lt;/P&gt;&lt;P&gt;        side = cl_gui_docking_container=&amp;gt;dock_at_top.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;create alv control&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  CREATE OBJECT c_alv&lt;/P&gt;&lt;P&gt;     EXPORTING i_parent = c_dockingcont.* create the application object to handle the ABAP Objects Events  CREATE OBJECT c_dragdropapp.* Events alv control&lt;/P&gt;&lt;P&gt;*For Dragging&lt;/P&gt;&lt;P&gt;  SET HANDLER c_dragdropapp-&amp;gt;handle_alv_drag FOR c_alv.&lt;/P&gt;&lt;P&gt;*For Dropping&lt;/P&gt;&lt;P&gt;  SET HANDLER c_dragdropapp-&amp;gt;handle_alv_drop FOR c_alv.* build tree nodes for drag&amp;amp;drop&lt;/P&gt;&lt;P&gt;  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-&amp;gt;set_table_for_first_display&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      is_layout                     = it_layout&lt;/P&gt;&lt;P&gt;    CHANGING&lt;/P&gt;&lt;P&gt;      it_outtab                     = it_t016t&lt;/P&gt;&lt;P&gt;      it_fieldcatalog               = it_fcat&lt;/P&gt;&lt;P&gt;    EXCEPTIONS&lt;/P&gt;&lt;P&gt;      invalid_parameter_combination = 1&lt;/P&gt;&lt;P&gt;      program_error                 = 2&lt;/P&gt;&lt;P&gt;      too_many_lines                = 3&lt;/P&gt;&lt;P&gt;      OTHERS                        = 4.&lt;/P&gt;&lt;P&gt;  IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno&lt;/P&gt;&lt;P&gt;               WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.&lt;/P&gt;&lt;P&gt;  ENDIF.ENDFORM.                               "ALV_CONTROLS&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;amp;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*&amp;amp;      Form  build_handle&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;amp;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      text&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="-----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; --&amp;gt;  p1        text&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; &amp;lt;--  p2        text&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="-----------------------------------------------------------------" /&gt;FORM build_handle.&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;define a drag &amp;amp; Drop behaviour for the whole grid&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  CREATE OBJECT c_dragdropalv.  effect = cl_dragdrop=&amp;gt;move + cl_dragdrop=&amp;gt;copy.  CALL METHOD c_dragdropalv-&amp;gt;add&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      flavor     = 'Line'&lt;/P&gt;&lt;P&gt;      dragsrc    = 'X'&lt;/P&gt;&lt;P&gt;      droptarget = 'X'&lt;/P&gt;&lt;P&gt;      effect     = effect.*getting the handle for drag and drop&lt;/P&gt;&lt;P&gt;  CALL METHOD c_dragdropalv-&amp;gt;get_handle&lt;/P&gt;&lt;P&gt;    IMPORTING&lt;/P&gt;&lt;P&gt;      handle = handle_alv.&lt;/P&gt;&lt;P&gt;ENDFORM.                               " build_handle&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;amp;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*&amp;amp;      Form  fetch_data&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;amp;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      text&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="-----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; --&amp;gt;  p1        text&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; &amp;lt;--  p2        text&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="-----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;FORM fetch_data .* select and display data from t016&lt;/P&gt;&lt;P&gt;  SELECT brtxt brsch spras FROM t016t INTO CORRESPONDING FIELDS OF TABLE it_t016t&lt;/P&gt;&lt;P&gt;  WHERE spras = 'EN'.&lt;/P&gt;&lt;P&gt;ENDFORM.                    " fetch_data&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;amp;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*&amp;amp;      Form  alv_report_layout&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;amp;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      text&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="-----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; --&amp;gt;  p1        text&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; &amp;lt;--  p2        text&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="-----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;FORM alv_report_layout .  it_layout-grid_title = 'ALV Drag Drop'.* provide handle to alv control to all rows for same drag &amp;amp; drop behaviour&lt;/P&gt;&lt;P&gt;  it_layout-s_dragdrop-row_ddid = handle_alv.&lt;/P&gt;&lt;P&gt;ENDFORM.                    " alv_report_layout&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;amp;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*&amp;amp;      Form  alv_build_fieldcat&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;amp;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      text&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="-----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; --&amp;gt;  p1        text&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; &amp;lt;--  p2        text&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="-----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;FORM alv_build_fieldcat .  DATA lv_fldcat TYPE lvc_s_fcat.&lt;/P&gt;&lt;P&gt;  CLEAR lv_fldcat.  lv_fldcat-row_pos   = '1'.&lt;/P&gt;&lt;P&gt;  lv_fldcat-col_pos   = '1'.&lt;/P&gt;&lt;P&gt;  lv_fldcat-fieldname = 'BRSCH'.&lt;/P&gt;&lt;P&gt;  lv_fldcat-tabname   = 'IT_T016T'.&lt;/P&gt;&lt;P&gt;  lv_fldcat-outputlen = 8.&lt;/P&gt;&lt;P&gt;  lv_fldcat-scrtext_m = 'Industry'.  APPEND lv_fldcat TO it_fcat.&lt;/P&gt;&lt;P&gt;  CLEAR lv_fldcat.  lv_fldcat-row_pos   = '1'.&lt;/P&gt;&lt;P&gt;  lv_fldcat-col_pos   = '2'.&lt;/P&gt;&lt;P&gt;  lv_fldcat-fieldname = 'BRTXT'.&lt;/P&gt;&lt;P&gt;  lv_fldcat-tabname   = 'IT_T016T'.&lt;/P&gt;&lt;P&gt;  lv_fldcat-outputlen = 15.&lt;/P&gt;&lt;P&gt;  lv_fldcat-scrtext_m = 'Description'.  APPEND lv_fldcat TO it_fcat.&lt;/P&gt;&lt;P&gt;  CLEAR lv_fldcat.&lt;/P&gt;&lt;P&gt;ENDFORM.                    " alv_build_fieldcat* PAI module of the screen created. In case we use an interactive ALV or&lt;/P&gt;&lt;P&gt;*for additional functionalities we can create OK codes&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;and based on the user command we can do the coding.&lt;/STRONG&gt;&amp;amp;----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;*&amp;amp;      Module  USER_COMMAND_0600  INPUT&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;amp;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      text&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="-----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;MODULE user_command_0600 INPUT.ENDMODULE.                 " USER_COMMAND_0600  INPUT&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 25 Jun 2008 22:58:45 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/does-alv-support-multiple-lines-drag-drop-functionality/m-p/4115731#M983971</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2008-06-25T22:58:45Z</dc:date>
    </item>
    <item>
      <title>Re: Does ALV support multiple Lines Drag &amp; Drop Functionality</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/does-alv-support-multiple-lines-drag-drop-functionality/m-p/4115732#M983972</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Sridhar&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You may be mislead that the drag event (e.g. ONDROP) has only a single row as IMPORTING parameter. However, the selected rows are actually "transported" by the dragdrop object and here you can have a many rows as you like.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I modified sample &lt;STRONG&gt;BCALV_TEST_GRID_DRAG_DROP&lt;/STRONG&gt; (available on ECC 6.0) to demonstrate how simple it is to define drag&amp;amp;drop functionality for multiple rows. The major changes are in event handler methods ONDRAG, ONDROP, and ONDROPCOMPLETE (search for $ in the coding).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp; Report  BCALV_TEST_GRID_DRAG_DROP                                   *
*&amp;amp;                                                                     *
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp; Thread: Does ALV support multiple Lines Drag &amp;amp; Drop Functionality   *
*&amp;amp; &amp;lt;a class="jive_macro jive_macro_thread" href="" __jive_macro_name="thread" modifiedtitle="true" __default_attr="935725"&amp;gt;&amp;lt;/a&amp;gt;     *
*&amp;amp;---------------------------------------------------------------------*
REPORT zus_sdn_bcalv_test_grid_dd.

TYPES: g_ty_s_sflight TYPE alv_t_t2.

CONSTANTS: con_sflight TYPE lvc_fname VALUE 'ALV_T_T2'.

CONSTANTS: con_exit TYPE sy-ucomm VALUE 'EXIT',
           con_canc TYPE sy-ucomm VALUE 'CANC',
           con_back TYPE sy-ucomm VALUE 'BACK',

           con_true TYPE char1 VALUE 'X',

           con_edit_grid         TYPE i VALUE 1,
           con_edit_column       TYPE i VALUE 2,
           con_edit_cell         TYPE i VALUE 3,

           con_edit_mode_display TYPE i VALUE 1,
           con_edit_mode_change  TYPE i VALUE 2,

           con_edit_event_enter  TYPE i VALUE 1,
           con_edit_event_modify TYPE i VALUE 2,

           con_source          TYPE i VALUE 1,
           con_target          TYPE i VALUE 2,

           con_dragdrop_row    TYPE i VALUE 1,
           con_dragdrop_column TYPE i VALUE 2,
           con_dragdrop_cell   TYPE i VALUE 3,

           con_dragdrop_effect_move TYPE i VALUE 1,
           con_dragdrop_effect_copy TYPE i VALUE 2,
           con_dragdrop_effect_all  TYPE i VALUE 3.

CLASS cl_gui_resources DEFINITION LOAD.
CLASS lcl_events_d0100 DEFINITION DEFERRED.

TYPES: BEGIN OF g_ty_s_test,
         select_amount     TYPE i,
         no_info_popup     TYPE char1,
         info_popup_once   TYPE char1,
         events_info_popup TYPE lvc_fname OCCURS 0,
         edit_type         TYPE i,
         edit_mode         TYPE i,
         edit_event        TYPE i,
         edit_fields       TYPE lvc_fname OCCURS 0,
         dragdrop_type     TYPE i,
         dragdrop_effect   TYPE i,
         dragdrop_fields   TYPE lvc_fname OCCURS 0,
         bypassing_buffer  TYPE char1,
         buffer_active     TYPE char1,
       END   OF g_ty_s_test,

       BEGIN OF g_ty_s_outtab.
INCLUDE TYPE g_ty_s_sflight.
TYPES:   table                TYPE char10,
         count                TYPE i,
         box                  TYPE char1,
         lights               TYPE char1,
         handle_style         TYPE lvc_t_styl,
         handle_dragdrop      TYPE lvc_t_drdr,
         tabcolor             TYPE lvc_t_scol,
       END   OF g_ty_s_outtab,
       g_ty_t_outtab TYPE TABLE OF g_ty_s_outtab.

DATA: g_field TYPE lvc_fname.

DATA: g_okcode TYPE sy-ucomm.

DATA: gs_test TYPE g_ty_s_test.

DATA: gt_outtab_source TYPE g_ty_t_outtab,
      gt_outtab_target TYPE g_ty_t_outtab,

      gr_container_d0100_source    TYPE REF TO cl_gui_custom_container,
      gr_grid_d0100_source         TYPE REF TO cl_gui_alv_grid,

      gr_container_d0100_target    TYPE REF TO cl_gui_custom_container,
      gr_grid_d0100_target         TYPE REF TO cl_gui_alv_grid,

      gr_events_d0100              TYPE REF TO lcl_events_d0100,
      gr_dragdrop_d0100            TYPE REF TO cl_dragdrop,
      gr_dragdrop_background_d0100 TYPE REF TO cl_dragdrop.

*---------------------------------------------------------------------*
*       CLASS lcl_events_d0100 DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_events_d0100 DEFINITION.
  PUBLIC SECTION.
    DATA:
    m_grid TYPE i.

    METHODS:
    data_changed         FOR EVENT data_changed
                         OF cl_gui_alv_grid
                         IMPORTING er_data_changed
                                   e_onf4
                                   e_onf4_before
                                   e_onf4_after,

    data_changed_finished
                         FOR EVENT data_changed_finished
                         OF cl_gui_alv_grid,

    ondrag               FOR EVENT ondrag
                         OF cl_gui_alv_grid
                         IMPORTING e_row
                                   e_column
                                   es_row_no
                                   e_dragdropobj,

    ondrop               FOR EVENT ondrop
                         OF cl_gui_alv_grid
                         IMPORTING e_row
                                   e_column
                                   es_row_no
                                   e_dragdropobj,

    ondropcomplete       FOR EVENT ondropcomplete
                         OF cl_gui_alv_grid
                         IMPORTING e_row
                                   e_column
                                   es_row_no
                                   e_dragdropobj,

    ondropgetflavor      FOR EVENT ondropgetflavor
                         OF cl_gui_alv_grid
                         IMPORTING e_row
                                   e_column
                                   es_row_no
                                   e_dragdropobj
                                   e_flavors.
ENDCLASS.                    "lcl_events_d0100 DEFINITION

*---------------------------------------------------------------------*
*       CLASS lcl_events_d0100 IMPLEMENTATION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_events_d0100 IMPLEMENTATION.
*---------------------------------------------------------------------*
*       METHOD data_cahnged                                           *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
  METHOD data_changed.
    PERFORM d0100_event_data_changed USING er_data_changed
                                           e_onf4
                                           e_onf4_before
                                           e_onf4_after
                                           m_grid.
  ENDMETHOD.                    "data_changed
*---------------------------------------------------------------------*
*       METHOD data_changed_finished                                  *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
  METHOD data_changed_finished.
    PERFORM d0100_event_data_changed_finis.
  ENDMETHOD.                    "data_changed_finished
*---------------------------------------------------------------------*
*       METHOD ondrag                                                 *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
  METHOD ondrag.
    PERFORM d0100_event_ondrag USING e_row
                                     e_column
                                     e_dragdropobj.
  ENDMETHOD.                    "ondrag

*---------------------------------------------------------------------*
*       METHOD ondrop                                                 *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
  METHOD ondrop.
    PERFORM d0100_event_ondrop USING e_row
                                     e_column
                                     e_dragdropobj.
  ENDMETHOD.                    "ondrop

*---------------------------------------------------------------------*
*       METHOD ondropcomplete                                         *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
  METHOD ondropcomplete.
    PERFORM d0100_event_ondropcomplete USING e_row
                                             e_column
                                             e_dragdropobj.
  ENDMETHOD.                    "ondropcomplete

*---------------------------------------------------------------------*
*       METHOD ondropgetflavor                                        *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
  METHOD ondropgetflavor.
    PERFORM d0100_event_ondropgetflavor USING e_row
                                              e_column
                                              es_row_no
                                              e_dragdropobj
                                              e_flavors.
  ENDMETHOD.                    "ondropgetflavor
ENDCLASS.                    "lcl_events_d0100 IMPLEMENTATION

*---------------------------------------------------------------------*
*       CLASS lcl_dragdrop_obj_d0100 DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_dragdrop_obj_d0100 DEFINITION.
  PUBLIC SECTION.
    DATA: line  TYPE g_ty_s_outtab,
          lines TYPE g_ty_t_outtab, " $INSERT
          rows  TYPE lvc_t_rows,
          index TYPE i.
ENDCLASS.                    "lcl_dragdrop_obj_d0100 DEFINITION

*----------------------------------------------------------------------*
* SELECTION-SCREEN                                                     *
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK gen WITH FRAME.
PARAMETERS:
p_amount TYPE i DEFAULT 30.
SELECTION-SCREEN END OF BLOCK gen.

SELECTION-SCREEN BEGIN OF BLOCK inf WITH FRAME.
PARAMETERS:
p_inf01 AS CHECKBOX DEFAULT con_true,
p_inf02 AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK inf.

SELECTION-SCREEN BEGIN OF BLOCK drd WITH FRAME.
PARAMETERS:
p_rows    RADIOBUTTON GROUP drdr,
p_cols    RADIOBUTTON GROUP drdr.
SELECT-OPTIONS:
p_colsf FOR g_field NO INTERVALS DEFAULT 'CARRID'.
PARAMETERS:
p_cells   RADIOBUTTON GROUP drdr.
SELECT-OPTIONS:
p_cellsf FOR g_field NO INTERVALS DEFAULT 'CARRID'.
SELECTION-SCREEN END OF BLOCK drd.

SELECTION-SCREEN BEGIN OF BLOCK eff WITH FRAME.
PARAMETERS:
p_both   RADIOBUTTON GROUP eff,
p_move   RADIOBUTTON GROUP eff,
p_copy   RADIOBUTTON GROUP eff.
SELECTION-SCREEN END OF BLOCK eff.

SELECTION-SCREEN BEGIN OF BLOCK ed1 WITH FRAME.
PARAMETERS:
p_grid   RADIOBUTTON GROUP edit DEFAULT 'X',
p_ecols   RADIOBUTTON GROUP edit.
SELECT-OPTIONS:
p_ecolsf FOR g_field NO INTERVALS DEFAULT 'CARRID'.
PARAMETERS:
p_ecells  RADIOBUTTON GROUP edit.
SELECT-OPTIONS:
p_ecelsf FOR g_field NO INTERVALS DEFAULT 'CARRID'.
PARAMETERS:
p_noedit RADIOBUTTON GROUP edit.
SELECTION-SCREEN   END OF BLOCK ed1.

SELECTION-SCREEN BEGIN OF BLOCK ed2 WITH FRAME.
PARAMETERS:
p_change RADIOBUTTON GROUP tgle DEFAULT 'X',
p_disp   RADIOBUTTON GROUP tgle.
SELECTION-SCREEN   END OF BLOCK ed2.

SELECTION-SCREEN BEGIN OF BLOCK ed3 WITH FRAME.
PARAMETERS:
p_evedit RADIOBUTTON GROUP eevt DEFAULT 'X',
p_evmod  RADIOBUTTON GROUP eevt,
p_noevt  RADIOBUTTON GROUP eevt.
SELECTION-SCREEN   END OF BLOCK ed3.

*----------------------------------------------------------------------*
* AT SELECTION-SCREEN ON VALUE-REQUEST                                 *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_colsf-low.
  PERFORM d0100_f4_fcode CHANGING p_colsf-low.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_cellsf-low.
  PERFORM d0100_f4_fcode CHANGING p_cellsf-low.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_ecolsf-low.
  PERFORM d0100_f4_fcode  CHANGING p_ecolsf-low.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_ecelsf-low.
  PERFORM d0100_f4_fcode CHANGING p_ecelsf-low.

*----------------------------------------------------------------------*
* START-OF-SELECTION                                                   *
*----------------------------------------------------------------------*
START-OF-SELECTION.
  gs_test-select_amount = p_amount.

  gs_test-no_info_popup   = p_inf01.
  gs_test-info_popup_once = p_inf02.

  CASE con_true.
    WHEN p_rows.
      gs_test-dragdrop_type = con_dragdrop_row.
    WHEN p_cols.
      gs_test-dragdrop_type = con_dragdrop_column.
      LOOP AT p_colsf.
        IF NOT p_colsf-low IS INITIAL.
          APPEND p_colsf-low TO gs_test-dragdrop_fields.
        ENDIF.
      ENDLOOP.
    WHEN p_cells.
      gs_test-dragdrop_type = con_dragdrop_cell.
      LOOP AT p_cellsf.
        IF NOT p_cellsf-low IS INITIAL.
          APPEND p_cellsf-low TO gs_test-dragdrop_fields.
        ENDIF.
      ENDLOOP.
  ENDCASE.
  CASE con_true.
    WHEN p_move.
      gs_test-dragdrop_effect = con_dragdrop_effect_move.
    WHEN p_copy.
      gs_test-dragdrop_effect = con_dragdrop_effect_copy.
    WHEN p_both.
      gs_test-dragdrop_effect = con_dragdrop_effect_all.
  ENDCASE.

  CASE con_true.
    WHEN p_grid.
      gs_test-edit_type     = con_edit_grid.
    WHEN p_ecols.
      gs_test-edit_type     = con_edit_column.
      LOOP AT p_ecolsf.
        IF NOT p_ecolsf-low IS INITIAL.
          APPEND p_ecolsf-low TO gs_test-edit_fields.
        ENDIF.
      ENDLOOP.
    WHEN p_ecells.
      gs_test-edit_type     = con_edit_cell.
      LOOP AT p_ecelsf.
        IF NOT p_ecelsf-low IS INITIAL.
          APPEND p_ecelsf-low TO gs_test-edit_fields.
        ENDIF.
      ENDLOOP.
  ENDCASE.
  CASE con_true.
    WHEN p_disp.
      gs_test-edit_mode     = con_edit_mode_display.
    WHEN p_change.
      gs_test-edit_mode     = con_edit_mode_change.
  ENDCASE.
  CASE con_true.
    WHEN p_evedit.
      gs_test-edit_event    = con_edit_event_enter.
    WHEN p_evmod.
      gs_test-edit_event    = con_edit_event_modify.
  ENDCASE.

  gs_test-bypassing_buffer = space.
  gs_test-buffer_active    = space.

*----------------------------------------------------------------------*
* END-OF-SELECTION                                                     *
*----------------------------------------------------------------------*
END-OF-SELECTION.
  CALL SCREEN 100.

*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Module  d0100_set_status  OUTPUT
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE d0100_set_status OUTPUT.
  PERFORM d0100_set_status.
ENDMODULE.                 " d0100_set_status  OUTPUT

*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Module  d0100_prepare_container  OUTPUT
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE d0100_prepare_container OUTPUT.
  PERFORM d0100_prepare_container.
ENDMODULE.                 " d0100_prepare_container  OUTPUT

*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Module  d0100_exit  INPUT
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE d0100_exit INPUT.
  PERFORM d0100_exit.
ENDMODULE.                 " d0100_exit  INPUT

*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Module  d0100_fcode  INPUT
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE d0100_fcode INPUT.
  PERFORM d0100_fcode.
ENDMODULE.                 " d0100_fcode  INPUT

*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  d0100_set_status
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM d0100_set_status .

  TYPES: BEGIN OF l_ty_s_excl,
           func TYPE syucomm,
         END   OF l_ty_s_excl,
         l_ty_t_excl TYPE STANDARD TABLE OF l_ty_s_excl.

  DATA: lt_excl TYPE l_ty_t_excl.

  SET PF-STATUS 'D0100' EXCLUDING lt_excl.
  SET TITLEBAR 'D0100'.

ENDFORM.                    " d0100_set_status

*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  d0100_prepare_container
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM d0100_prepare_container .

  DATA: lt_fcat             TYPE lvc_t_fcat,
        ls_layo             TYPE lvc_s_layo,
        ls_vari             TYPE disvariant,
        l_consistency_check TYPE char1.

  IF gr_container_d0100_source IS INITIAL.
    IF cl_gui_alv_grid=&amp;gt;offline( ) IS INITIAL.
      CREATE OBJECT gr_container_d0100_source
        EXPORTING
          container_name = 'D0100_CONTAINER_SOURCE'.
    ENDIF.

    CREATE OBJECT gr_grid_d0100_source
      EXPORTING
        i_parent = gr_container_d0100_source.

    PERFORM d0100_get_outtab.

    PERFORM d0100_set_grid_vari CHANGING ls_vari.
    PERFORM d0100_set_grid_layo CHANGING ls_layo.
    PERFORM d0100_set_grid_fcat CHANGING lt_fcat.
    PERFORM d0100_set_grid_events USING con_source.
    PERFORM d0100_set_grid_edit USING    con_source
                                CHANGING ls_layo
                                         lt_fcat.
    PERFORM d0100_set_drag_drop USING    con_source
                                CHANGING ls_layo
                                         lt_fcat.

    CALL METHOD gr_grid_d0100_source-&amp;gt;set_table_for_first_display
      EXPORTING
        i_buffer_active     = gs_test-buffer_active
        i_bypassing_buffer  = gs_test-bypassing_buffer
        i_consistency_check = l_consistency_check
        is_variant          = ls_vari
        i_save              = 'A'
        i_default           = con_true
        is_layout           = ls_layo
      CHANGING
        it_outtab           = gt_outtab_source[]
        it_fieldcatalog     = lt_fcat.
  ENDIF.

  IF gr_container_d0100_target IS INITIAL.
    CREATE OBJECT gr_container_d0100_target
      EXPORTING
        container_name = 'D0100_CONTAINER_TARGET'.

    CREATE OBJECT gr_grid_d0100_target
      EXPORTING
        i_parent = gr_container_d0100_target.

    PERFORM d0100_set_grid_vari CHANGING ls_vari.
    PERFORM d0100_set_grid_layo CHANGING ls_layo.
    PERFORM d0100_set_grid_fcat CHANGING lt_fcat.
    PERFORM d0100_set_grid_events USING con_target.
    PERFORM d0100_set_grid_edit USING    con_target
                                CHANGING ls_layo
                                         lt_fcat.
    PERFORM d0100_set_drag_drop USING    con_target
                                CHANGING ls_layo
                                         lt_fcat.

    CALL METHOD gr_grid_d0100_target-&amp;gt;set_table_for_first_display
      EXPORTING
        i_buffer_active     = space
        i_consistency_check = l_consistency_check
        is_variant          = ls_vari
        i_save              = 'A'
        i_default           = con_true
        is_layout           = ls_layo
      CHANGING
        it_outtab           = gt_outtab_target[]
        it_fieldcatalog     = lt_fcat.
  ENDIF.

ENDFORM.                    " d0100_prepare_container

*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  d0100_exit
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM d0100_exit .

  DATA: l_okcode LIKE sy-ucomm.

  l_okcode = g_okcode.
  CLEAR g_okcode.

  CASE l_okcode.
    WHEN con_exit OR con_back OR con_canc.
      CALL METHOD gr_grid_d0100_source-&amp;gt;free.
      CALL METHOD gr_container_d0100_source-&amp;gt;free.
      CALL METHOD gr_grid_d0100_target-&amp;gt;free.
      CALL METHOD gr_container_d0100_target-&amp;gt;free.

      CALL METHOD cl_gui_cfw=&amp;gt;flush.

      CLEAR gr_container_d0100_source.
      CLEAR gr_grid_d0100_source.
      CLEAR gr_container_d0100_target.
      CLEAR gr_grid_d0100_target.
      CLEAR gr_events_d0100.

      SET SCREEN 0.
      LEAVE SCREEN.
  ENDCASE.

ENDFORM.                    " d0100_exit

*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  d0100_fcode
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM d0100_fcode .

  DATA: l_okcode LIKE sy-ucomm.

  l_okcode = g_okcode.
  CLEAR g_okcode.

  CASE l_okcode.
    WHEN con_exit OR con_back OR con_canc.
      g_okcode = l_okcode.
      PERFORM d0100_exit.
  ENDCASE.

ENDFORM.                    " d0100_fcode

*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  d0100_set_grid_vari
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM d0100_set_grid_vari CHANGING cs_vari TYPE disvariant.

  cs_vari-report      = sy-repid.
  cs_vari-handle      = space.
  cs_vari-log_group   = space.
  cs_vari-username    = space.
  cs_vari-variant     = space.
  cs_vari-text        = space.
  cs_vari-dependvars  = space.

ENDFORM.                    " d0100_set_grid_vari

*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  d0100_set_grid_layo
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM d0100_set_grid_layo  CHANGING cs_layo TYPE lvc_s_layo.

*... ALV-Control: Allgemeine Anzeigeoptionen
  cs_layo-stylefname  = space.

  cs_layo-cwidth_opt  = con_true.
  cs_layo-zebra       = space.
  cs_layo-smalltitle  = space.
  cs_layo-graphics    = space.
  cs_layo-frontend    = space.
  cs_layo-template    = space.

*... ALV-Control: Gridcustomizing
  cs_layo-no_colexpd  = space.
  cs_layo-no_hgridln  = space.
  cs_layo-no_vgridln  = space.
  cs_layo-no_rowmark  = space.
  cs_layo-no_headers  = space.
  cs_layo-no_merging  = space.
  cs_layo-grid_title  = space.

  cs_layo-no_toolbar  = space.

  cs_layo-sel_mode    = 'D'.

  cs_layo-box_fname   = space.

  cs_layo-sgl_clk_hd  = space.

*... ALV-Control: Summenoptionen
  cs_layo-totals_bef  = space.
  cs_layo-no_totline  = space.
  cs_layo-numc_total  = space.
  cs_layo-no_utsplit  = space.

*... ALV-Control: Exceptions
  cs_layo-excp_fname  = space.
  cs_layo-excp_rolln  = space.
  cs_layo-excp_conds  = space.
  cs_layo-excp_led    = space.

*... ALV-Control: Steuerung Interaktion
  cs_layo-detailinit  = space.
  cs_layo-detailtitl  = space.
  cs_layo-keyhot      = space.
  cs_layo-no_keyfix   = space.
  cs_layo-no_author   = space.
  CLEAR cs_layo-s_dragdrop.

*... ALV-Control: Farben
  cs_layo-info_fname  = space.
  cs_layo-ctab_fname  = 'TABCOLOR'.

*... ALV-Control: Eingabefähigkeit
  cs_layo-edit        = con_true.
  cs_layo-edit_mode   = space.

  cs_layo-no_rowins   = space.
  cs_layo-no_rowmove  = space.

*... ALV-Control: Web-Optionen
  cs_layo-weblook     = space.
  cs_layo-webstyle    = space.
  cs_layo-webrows     = space.
  cs_layo-webxwidth   = space.
  cs_layo-webxheight  = space.

ENDFORM.                    " d0100_set_grid_layo

*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  d0100_set_grid_fcat
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM d0100_set_grid_fcat CHANGING ct_fcat TYPE lvc_t_fcat.

  DATA: l_bypassing_buffer TYPE char1,
        l_buffer_active    TYPE char1,
        ls_fcat            TYPE lvc_s_fcat.

  CLEAR ct_fcat[].

  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
      i_buffer_active        = l_buffer_active
      i_structure_name       = con_sflight
      i_client_never_display = con_true
      i_bypassing_buffer     = l_bypassing_buffer
    CHANGING
      ct_fieldcat            = ct_fcat[]
    EXCEPTIONS
      inconsistent_interface = 1
      program_error          = 2
      OTHERS                 = 3.
  IF sy-subrc &amp;lt;&amp;gt; 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  CLEAR ls_fcat.
  ls_fcat-tabname   = '1'.
  ls_fcat-fieldname = 'TABLE'.
  ls_fcat-inttype   = 'C'.
  ls_fcat-datatype  = 'CHAR'.
  ls_fcat-intlen    = 10.
  ls_fcat-scrtext_s = ls_fcat-fieldname.
  ls_fcat-scrtext_m = ls_fcat-fieldname.
  ls_fcat-scrtext_l = ls_fcat-fieldname.
  APPEND ls_fcat TO ct_fcat.

ENDFORM.                    " d0100_set_grid_fcat

*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  d0100_set_grid_events
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM d0100_set_grid_events USING i_grid TYPE i.

  CREATE OBJECT gr_events_d0100.

  CASE i_grid.
    WHEN con_source.
      gr_events_d0100-&amp;gt;m_grid = con_source.

      SET HANDLER gr_events_d0100-&amp;gt;ondrag
                  FOR gr_grid_d0100_source.

      SET HANDLER gr_events_d0100-&amp;gt;ondrop
                  FOR gr_grid_d0100_source.

      SET HANDLER gr_events_d0100-&amp;gt;ondropcomplete
                  FOR gr_grid_d0100_source.

      SET HANDLER gr_events_d0100-&amp;gt;ondropgetflavor
                  FOR gr_grid_d0100_source.

      SET HANDLER gr_events_d0100-&amp;gt;data_changed
                  FOR gr_grid_d0100_source.

      SET HANDLER gr_events_d0100-&amp;gt;data_changed_finished
                  FOR gr_grid_d0100_source.

    WHEN con_target.
      gr_events_d0100-&amp;gt;m_grid = con_target.

      SET HANDLER gr_events_d0100-&amp;gt;ondrag
                  FOR gr_grid_d0100_target.

      SET HANDLER gr_events_d0100-&amp;gt;ondrop
                  FOR gr_grid_d0100_target.

      SET HANDLER gr_events_d0100-&amp;gt;ondropcomplete
                  FOR gr_grid_d0100_target.

      SET HANDLER gr_events_d0100-&amp;gt;ondropgetflavor
                  FOR gr_grid_d0100_target.

      SET HANDLER gr_events_d0100-&amp;gt;data_changed
                  FOR gr_grid_d0100_target.

      SET HANDLER gr_events_d0100-&amp;gt;data_changed_finished
                  FOR gr_grid_d0100_target.
  ENDCASE.

ENDFORM.                    " d0100_set_grid_events

*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  d0100_set_grid_edit
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM d0100_set_grid_edit USING i_grid TYPE i
                         CHANGING cs_layo TYPE lvc_s_layo
                                  ct_fcat TYPE lvc_t_fcat.

  FIELD-SYMBOLS: &amp;lt;ls_fcat&amp;gt; TYPE lvc_s_fcat.

  DATA: ls_edit   TYPE lvc_s_styl,
        lt_edit   TYPE lvc_t_styl,
        ls_field  TYPE lvc_fname,
        ls_outtab TYPE g_ty_s_outtab.

  DATA: l_index   TYPE i,
        l_erg     TYPE i.

  CASE gs_test-edit_type.
    WHEN con_edit_grid.
*... Grid Editerbar
*    In Layout wird Feld EDIT auf 'X' gesetzt
      cs_layo-edit = con_true.

    WHEN con_edit_column.
*... Spalteneditierbar
*    In Feldkatalog wird Feld EDIT auf 'X' gesetzt für Spalte CARRID
      LOOP AT gs_test-edit_fields INTO ls_field.
        READ TABLE ct_fcat ASSIGNING &amp;lt;ls_fcat&amp;gt;
                   WITH KEY fieldname = ls_field.
        IF sy-subrc EQ 0.
          &amp;lt;ls_fcat&amp;gt;-edit = con_true.
        ENDIF.
      ENDLOOP.

    WHEN con_edit_cell.
*... Zellen-Editierbar
*    In Layout wird Feld SYTLEFNAME auf 'HANDLE_STYLE' gesetzt
      cs_layo-stylefname = 'HANDLE_STYLE'.

      LOOP AT gt_outtab_source INTO ls_outtab.
        l_index = sy-tabix.
        l_erg   = l_index MOD 2.
        IF l_erg EQ 0.
          LOOP AT gs_test-edit_fields INTO ls_field.
            ls_edit-fieldname = ls_field.
            ls_edit-style     = cl_gui_alv_grid=&amp;gt;mc_style_enabled.
            ls_edit-style2    = space.
            ls_edit-style3    = space.
            ls_edit-style4    = space.
            ls_edit-maxlen    = 8.
            INSERT ls_edit INTO TABLE lt_edit.
          ENDLOOP.

          INSERT LINES OF lt_edit INTO TABLE ls_outtab-handle_style.

          MODIFY gt_outtab_source INDEX l_index FROM ls_outtab
                                  TRANSPORTING handle_style.
        ENDIF.
      ENDLOOP.

    WHEN OTHERS.
      EXIT.
  ENDCASE.

  CASE gs_test-edit_event.
    WHEN con_edit_event_enter.
*... hiermit erfolgt eine Prüfung nach Eingabe wenn ENTER gedrückt wird
      CASE i_grid.
        WHEN con_source.
          CALL METHOD gr_grid_d0100_source-&amp;gt;register_edit_event
            EXPORTING
              i_event_id = cl_gui_alv_grid=&amp;gt;mc_evt_enter.
        WHEN con_target.
          CALL METHOD gr_grid_d0100_target-&amp;gt;register_edit_event
            EXPORTING
              i_event_id = cl_gui_alv_grid=&amp;gt;mc_evt_enter.
      ENDCASE.

    WHEN con_edit_event_modify.
*... hiermit erfolgt eine Prüfung nach jeder Änderung
      CASE i_grid.
        WHEN con_source.
          CALL METHOD gr_grid_d0100_source-&amp;gt;register_edit_event
            EXPORTING
              i_event_id = cl_gui_alv_grid=&amp;gt;mc_evt_modified.
        WHEN con_target.
          CALL METHOD gr_grid_d0100_target-&amp;gt;register_edit_event
            EXPORTING
              i_event_id = cl_gui_alv_grid=&amp;gt;mc_evt_modified.
      ENDCASE.
  ENDCASE.

  CASE gs_test-edit_mode.
    WHEN con_edit_mode_change.
*... hier wird alles was editierbar sein kann auch editierbar gemacht
      CASE i_grid.
        WHEN con_source.
          CALL METHOD gr_grid_d0100_source-&amp;gt;set_ready_for_input
            EXPORTING
              i_ready_for_input = 1.
        WHEN con_target.
          CALL METHOD gr_grid_d0100_target-&amp;gt;set_ready_for_input
            EXPORTING
              i_ready_for_input = 1.
      ENDCASE.
    WHEN con_edit_mode_display.
*... hier wird alles was editierbar sein kann nicht editierbar gemacht
      CASE i_grid.
        WHEN con_source.
          CALL METHOD gr_grid_d0100_source-&amp;gt;set_ready_for_input
            EXPORTING
              i_ready_for_input = 0.
        WHEN con_target.
          CALL METHOD gr_grid_d0100_target-&amp;gt;set_ready_for_input
            EXPORTING
              i_ready_for_input = 0.
      ENDCASE.
  ENDCASE.

*  cs_layo-no_rowins   = gs_test-no_row_ins.
*  cs_layo-no_rowmove  = gs_test-no_row_move.

ENDFORM.                    " d0100_set_grid_edit

*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  d0100_get_outtab
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM d0100_get_outtab .

  DATA: ls_outtab TYPE g_ty_s_outtab.

  SELECT * FROM (con_sflight) INTO CORRESPONDING FIELDS
             OF TABLE gt_outtab_source
             UP TO gs_test-select_amount ROWS
             ORDER BY PRIMARY KEY.

  gs_test-select_amount = sy-dbcnt.

  ls_outtab-table = 'SOURCE'.
  MODIFY gt_outtab_source FROM ls_outtab
                          TRANSPORTING table
                          WHERE TABLE ne LS_OUTTAB-TABLE.

  gt_outtab_target[] = gt_outtab_source[].

  ls_outtab-table = 'TARGET'.
  MODIFY gt_outtab_target FROM ls_outtab
                          TRANSPORTING table
                          WHERE TABLE ne LS_OUTTAB-TABLE.

ENDFORM.                    " d0100_get_outtab

*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  d0100_event_ondrag
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM d0100_event_ondrag USING e_row         TYPE lvc_s_row
                              e_column      TYPE lvc_s_col
                              e_dragdropobj TYPE REF TO
                                            cl_dragdropobject."#EC *


  DATA: l_event TYPE lvc_fname.                             "#EC NEEDED

  DATA: lo_sender TYPE REF TO cl_gui_alv_grid,
        lt_outtab TYPE g_ty_t_outtab,
        lt_rows   TYPE lvc_t_row,
        ls_row    TYPE lvc_s_row. " $INSERT



  lo_sender ?= e_dragdropobj-&amp;gt;dragsourcectrl.
" (1) Get all selected rows...
  CALL METHOD lo_sender-&amp;gt;get_selected_rows
    IMPORTING
      et_index_rows = lt_rows
*      et_row_no     =
      .


  IF gs_test-info_popup_once EQ con_true.
    READ TABLE gs_test-events_info_popup INTO l_event
               WITH KEY table_line = 'ONDRAG'.
    IF sy-subrc NE 0.
      INSERT 'ONDRAG'
             INTO gs_test-events_info_popup INDEX 1.
      MESSAGE i000(0k) WITH text-t01.
    ENDIF.
  ELSEIF gs_test-no_info_popup EQ space.
    MESSAGE i000(0k) WITH text-t01.
  ENDIF.

  DATA: ls_outtab TYPE g_ty_s_outtab,
        l_obj     TYPE REF TO lcl_dragdrop_obj_d0100.

" (2)...and store them in the dragdrop object. This information
"    is required when the flavor=MOVE so we have to delete the
" selected rows from the source grid
  CREATE OBJECT l_obj.
  l_obj-&amp;gt;rows = lt_rows.  " $INSERT


  CASE e_dragdropobj-&amp;gt;dragsourcectrl.
    WHEN gr_grid_d0100_source.
      lt_outtab = gt_outtab_source.

    WHEN gr_grid_d0100_target.
      lt_outtab = gt_outtab_target.
  ENDCASE.

" Instead of saving the single row which was dragged we save
" all selected rows including the dragged one in the dragdrop object
  LOOP AT lt_rows INTO ls_row.
    READ TABLE lt_outtab INTO ls_outtab INDEX ls_row-index.

    IF ( syst-tabix = 1 ).
      l_obj-&amp;gt;line           = ls_outtab.
      l_obj-&amp;gt;index          = ls_row-index.
    ENDIF.

    APPEND ls_outtab TO l_obj-&amp;gt;lines.
  ENDLOOP.

  e_dragdropobj-&amp;gt;object = l_obj.  " $INSERT &amp;amp; MODIFY

**  CASE e_dragdropobj-&amp;gt;dragsourcectrl.
**    WHEN gr_grid_d0100_source.
**      READ TABLE gt_outtab_source INTO ls_outtab INDEX e_row-index.
**    WHEN gr_grid_d0100_target.
**      READ TABLE gt_outtab_target INTO ls_outtab INDEX e_row-index.
**  ENDCASE.
**  IF sy-subrc EQ 0.
**    l_obj-&amp;gt;line           = ls_outtab.
**    l_obj-&amp;gt;index          = e_row-index.
**    e_dragdropobj-&amp;gt;object = l_obj.
**  ENDIF.

ENDFORM.                    " d0100_event_ondrag

*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  d0100_event_ondrop
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM d0100_event_ondrop USING e_row         TYPE lvc_s_row
                              e_column      TYPE lvc_s_col
                              e_dragdropobj TYPE REF TO
                                             cl_dragdropobject."#EC *

  DATA: l_event TYPE lvc_fname.                             "#EC NEEDED

  IF gs_test-info_popup_once EQ con_true.
    READ TABLE gs_test-events_info_popup INTO l_event
               WITH KEY table_line = 'ONDROP'.
    IF sy-subrc NE 0.
      INSERT 'ONDROP'
             INTO gs_test-events_info_popup INDEX 1.
      MESSAGE i000(0k) WITH text-t02.
    ENDIF.
  ELSEIF gs_test-no_info_popup EQ space.
    MESSAGE i000(0k) WITH text-t02.
  ENDIF.

  DATA: l_obj     TYPE REF TO lcl_dragdrop_obj_d0100,
        ls_outtab TYPE g_ty_s_outtab.

  CREATE OBJECT l_obj.

  IF e_row-index IS INITIAL.
    e_row-index = 1.
  ENDIF.

  CATCH SYSTEM-EXCEPTIONS move_cast_error = 1.
    l_obj ?= e_dragdropobj-&amp;gt;object.
**    ls_outtab = l_obj-&amp;gt;line.  "$DELETE

"   Since we can have multiple rows that should be dropped we
"   replace the single-row coding with a loop over the selected rows
    LOOP AT l_obj-&amp;gt;lines INTO ls_outtab.  " $INSERT

      CASE e_dragdropobj-&amp;gt;effect.
        WHEN cl_dragdrop=&amp;gt;move.
          CASE e_dragdropobj-&amp;gt;droptargetctrl.
            WHEN gr_grid_d0100_source.
              INSERT ls_outtab INTO gt_outtab_source INDEX e_row-index.
            WHEN gr_grid_d0100_target.
              INSERT ls_outtab INTO gt_outtab_target INDEX e_row-index.
          ENDCASE.
        WHEN cl_dragdrop=&amp;gt;copy.
          CASE e_dragdropobj-&amp;gt;droptargetctrl.
            WHEN gr_grid_d0100_source.
              INSERT ls_outtab INTO gt_outtab_source INDEX e_row-index.
            WHEN gr_grid_d0100_target.
              INSERT ls_outtab INTO gt_outtab_target INDEX e_row-index.
          ENDCASE.
      ENDCASE.

    ENDLOOP.

  ENDCATCH.
  IF sy-subrc &amp;lt;&amp;gt; 0.
    CALL METHOD e_dragdropobj-&amp;gt;abort.
  ENDIF.

ENDFORM.                    " d0100_event_ondrop

*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  d0100_event_ondropcomplete
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM d0100_event_ondropcomplete USING e_row         TYPE lvc_s_row
                                      e_column      TYPE lvc_s_col
                                      e_dragdropobj TYPE REF TO
                                              cl_dragdropobject."#EC *

  DATA: l_event TYPE lvc_fname.                             "#EC NEEDED

  IF gs_test-info_popup_once EQ con_true.
    READ TABLE gs_test-events_info_popup INTO l_event
               WITH KEY table_line = 'ONDROPCOMPLETE'.
    IF sy-subrc NE 0.
      INSERT 'ONDROPCOMPLETE'
             INTO gs_test-events_info_popup INDEX 1.
      MESSAGE i000(0k) WITH text-t03.
    ENDIF.
  ELSEIF gs_test-no_info_popup EQ space.
    MESSAGE i000(0k) WITH text-t03.
  ENDIF.

  DATA: l_obj      TYPE REF TO lcl_dragdrop_obj_d0100,
        ls_row     TYPE lvc_s_row,  " $INSERT
        ls_stable  TYPE lvc_s_stbl,
        lr_grid    TYPE REF TO cl_gui_alv_grid.

  ls_stable-row = con_true.
  ls_stable-col = con_true.

  CATCH SYSTEM-EXCEPTIONS move_cast_error = 1.
    l_obj ?= e_dragdropobj-&amp;gt;object.
    IF e_dragdropobj-&amp;gt;effect = cl_dragdrop=&amp;gt;move.
"     Since we can have multiple lines for the drag&amp;amp;drop events
"     we replace the single-row coding with a loop over all
"     selected rows.

**      DELETE gt_outtab_source INDEX l_obj-&amp;gt;index. " $DELETE
      LOOP AT l_obj-&amp;gt;rows INTO ls_row.  " $INSERT
        DELETE gt_outtab_source INDEX ls_row-index.
      ENDLOOP.
    ENDIF.
  ENDCATCH.
  CASE sy-subrc.
    WHEN 0.
      CASE e_dragdropobj-&amp;gt;effect.
        WHEN cl_dragdrop=&amp;gt;move.
          lr_grid ?= e_dragdropobj-&amp;gt;dragsourcectrl.
          CALL METHOD lr_grid-&amp;gt;refresh_table_display
            EXPORTING
              is_stable = ls_stable.
          lr_grid ?= e_dragdropobj-&amp;gt;droptargetctrl.
          CALL METHOD lr_grid-&amp;gt;refresh_table_display
            EXPORTING
              is_stable = ls_stable.

        WHEN cl_dragdrop=&amp;gt;copy.
          lr_grid ?= e_dragdropobj-&amp;gt;droptargetctrl.
          CALL METHOD lr_grid-&amp;gt;refresh_table_display
            EXPORTING
              is_stable = ls_stable.
      ENDCASE.
    WHEN OTHERS.
      CALL METHOD e_dragdropobj-&amp;gt;abort.
  ENDCASE.

ENDFORM.                    " d0100_event_ondropcomplete

*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  d0100_event_ondropgetflavor
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM d0100_event_ondropgetflavor USING e_row         TYPE lvc_s_row
                                       e_column      TYPE lvc_s_col
                                       es_row_no     TYPE lvc_s_roid
                                       e_dragdropobj TYPE REF TO
                                                      cl_dragdropobject
                                       e_flavors     TYPE cndd_flavors.
                                                            "#EC *

  DATA: l_event TYPE lvc_fname.                             "#EC NEEDED

  IF gs_test-info_popup_once EQ con_true.
    READ TABLE gs_test-events_info_popup INTO l_event
               WITH KEY table_line = 'ONDROPGETFLAVOR'.
    IF sy-subrc NE 0.
      INSERT 'ONDROPGETFLAVOR'
             INTO gs_test-events_info_popup INDEX 1.
      MESSAGE i000(0k) WITH text-t04.
    ENDIF.
  ELSEIF gs_test-no_info_popup EQ space.
    MESSAGE i000(0k) WITH text-t04.
  ENDIF.

ENDFORM.                    " d0100_event_ondropgetflavor

*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  d0100_set_drag_drop
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM d0100_set_drag_drop USING i_grid TYPE i
                         CHANGING cs_layo TYPE lvc_s_layo
                                  ct_fcat TYPE lvc_t_fcat.

  DATA: l_effect                     TYPE i,
        l_dragdrop_handle            TYPE i,
        ls_dragdrop                  TYPE lvc_s_dd01,
        ls_drag_cell                 TYPE lvc_s_drdr,
        lt_drag_cells                TYPE lvc_t_drdr,
        ls_fcat                      TYPE lvc_s_fcat,
        l_field                      TYPE lvc_fname,
        l_source                     TYPE char1,
        l_target                     TYPE char1,
        ls_outtab                    TYPE g_ty_s_outtab,
        ls_tabcolor                  TYPE lvc_s_scol,
        lt_tabcolor                  TYPE lvc_t_scol.

  CASE i_grid.
    WHEN con_source.
      l_source = con_true.
    WHEN con_target.
      l_target = con_true.
  ENDCASE.
  l_source = con_true.
  l_target = con_true.

  CREATE OBJECT gr_dragdrop_d0100.
  CREATE OBJECT gr_dragdrop_background_d0100.

  CASE gs_test-dragdrop_effect.
    WHEN con_dragdrop_effect_move.
      l_effect = cl_dragdrop=&amp;gt;move.
    WHEN con_dragdrop_effect_copy.
      l_effect = cl_dragdrop=&amp;gt;copy.
    WHEN con_dragdrop_effect_all.
      l_effect = cl_dragdrop=&amp;gt;move + cl_dragdrop=&amp;gt;copy.
  ENDCASE.

  CASE gs_test-dragdrop_type.
    WHEN con_dragdrop_row.
*... setzen für alle Zeilen
*    Im Layout wird S_DRAGDROP mit Handle gefüllt
      CALL METHOD gr_dragdrop_d0100-&amp;gt;add
        EXPORTING
          flavor     = 'Line'                               "#EC NOTEXT
          dragsrc    = l_source
          droptarget = l_target
          effect     = l_effect.

      CALL METHOD gr_dragdrop_d0100-&amp;gt;get_handle
        IMPORTING
          handle = l_dragdrop_handle.

      ls_dragdrop-cntr_ddid = l_dragdrop_handle. "auch bei leerem Grid
      ls_dragdrop-grid_ddid = space.
      ls_dragdrop-col_ddid  = space.
      ls_dragdrop-row_ddid  = l_dragdrop_handle.
      ls_dragdrop-fieldname = space.
      cs_layo-s_dragdrop    = ls_dragdrop.

    WHEN con_dragdrop_column.
*... setzen für Spalten
*    Im Feldkatalog wird DRAGDROPID mit Handle gefüllt
      CALL METHOD gr_dragdrop_d0100-&amp;gt;add
        EXPORTING
          flavor     = 'Line'                               "#EC NOTEXT
          dragsrc    = l_source
          droptarget = l_target
          effect     = l_effect.

      CALL METHOD gr_dragdrop_d0100-&amp;gt;get_handle
        IMPORTING
          handle = l_dragdrop_handle.

      ls_dragdrop-cntr_ddid = l_dragdrop_handle. "auch bei leerem Grid
      ls_dragdrop-grid_ddid = space.
      ls_dragdrop-col_ddid  = l_dragdrop_handle.
      ls_dragdrop-row_ddid  = space.
      ls_dragdrop-fieldname = space.
      cs_layo-s_dragdrop    = ls_dragdrop.

      ls_fcat-dragdropid    = l_dragdrop_handle.
      LOOP AT gs_test-dragdrop_fields INTO l_field.
        ls_tabcolor-fname     = l_field.
        ls_tabcolor-color-col = cl_gui_resources=&amp;gt;list_col_negative.
        ls_tabcolor-color-int = 0.
        ls_tabcolor-color-inv = 0.
        ls_tabcolor-nokeycol  = con_true.
        APPEND ls_tabcolor TO lt_tabcolor.

        MODIFY ct_fcat FROM ls_fcat
                       TRANSPORTING dragdropid
                       WHERE fieldname = l_field.
      ENDLOOP.

      ls_outtab-tabcolor = lt_tabcolor.
      MODIFY gt_outtab_source FROM ls_outtab
                       TRANSPORTING tabcolor
                       WHERE tabcolor IS INITIAL.

    WHEN con_dragdrop_cell.
*... setzen für Zellen
      CALL METHOD gr_dragdrop_d0100-&amp;gt;add
        EXPORTING
          flavor     = 'Line'                               "#EC NOTEXT
          dragsrc    = l_source
          droptarget = l_target
          effect     = l_effect.

      CALL METHOD gr_dragdrop_d0100-&amp;gt;get_handle
        IMPORTING
          handle = l_dragdrop_handle.

      ls_dragdrop-cntr_ddid = l_dragdrop_handle. "auch bei leerem Grid
      ls_dragdrop-grid_ddid = space.
      ls_dragdrop-col_ddid  = space.
      ls_dragdrop-row_ddid  = space.
      ls_dragdrop-fieldname = 'HANDLE_DRAGDROP'.
      cs_layo-s_dragdrop    = ls_dragdrop.

      LOOP AT gs_test-dragdrop_fields INTO l_field.
        ls_drag_cell-fieldname  = l_field.
        ls_drag_cell-dragdropid = l_dragdrop_handle.
        INSERT ls_drag_cell INTO TABLE lt_drag_cells.

        ls_tabcolor-fname     = l_field.
        ls_tabcolor-color-col = cl_gui_resources=&amp;gt;list_col_negative.
        ls_tabcolor-color-int = 0.
        ls_tabcolor-color-inv = 0.
        ls_tabcolor-nokeycol  = con_true.
        APPEND ls_tabcolor TO lt_tabcolor.
      ENDLOOP.

      DATA: l_index   TYPE i,
            l_erg     TYPE i.

      LOOP AT gt_outtab_source INTO ls_outtab.
        l_index = sy-tabix.
        l_erg = sy-tabix MOD 2.
        IF l_erg EQ 0.
          ls_outtab-handle_dragdrop = lt_drag_cells.
          ls_outtab-tabcolor        = lt_tabcolor.
          MODIFY gt_outtab_source INDEX l_index FROM ls_outtab
                           TRANSPORTING handle_dragdrop
                                        tabcolor.
        ENDIF.
      ENDLOOP.
  ENDCASE.

ENDFORM.                    " d0100_set_drag_drop

*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  d0100_f4_fcode
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM d0100_f4_fcode CHANGING c_value TYPE lvc_s_fcat-fieldname.

  DATA: lt_fcat TYPE lvc_t_fcat,
        ls_fcat TYPE lvc_s_fcat.

  PERFORM d0100_set_grid_fcat CHANGING lt_fcat.

  DATA: lt_values TYPE TABLE OF seahlpres,
        lt_fields TYPE TABLE OF dfies,
        lt_return TYPE TABLE OF ddshretval,
        ls_value  TYPE seahlpres,
        ls_field  TYPE dfies,
        ls_return TYPE ddshretval.

  CLEAR ls_field.
  ls_field-fieldname = 'FIELDNAME'.
  ls_field-intlen    = 30.
  ls_field-leng      = 30.
  ls_field-outputlen = 30.
  ls_field-scrtext_s = ls_field-fieldname.
  ls_field-scrtext_m = ls_field-fieldname.
  ls_field-scrtext_l = ls_field-fieldname.
  ls_field-reptext   = ls_field-fieldname.
  APPEND ls_field TO lt_fields.

  LOOP AT lt_fcat INTO ls_fcat WHERE tech EQ space.
    ls_value-string = ls_fcat-fieldname.
    APPEND ls_value TO lt_values.
  ENDLOOP.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
   EXPORTING
*     DDIC_STRUCTURE         = ' '
     retfield               = 'FIELDNAME'
*     PVALKEY                = ' '
*     DYNPPROG               = ' '
*     DYNPNR                 = ' '
*     DYNPROFIELD            = ' '
*     STEPL                  = 0
*     WINDOW_TITLE           =
*     VALUE                  = ' '
*     VALUE_ORG              = 'C'
*     MULTIPLE_CHOICE        = ' '
     display                = space
*     CALLBACK_PROGRAM       = ' '
*     CALLBACK_FORM          = ' '
   TABLES
     value_tab              = lt_values
     field_tab              = lt_fields
     return_tab             = lt_return
*     DYNPFLD_MAPPING        =
   EXCEPTIONS
     parameter_error        = 1
     no_values_found        = 2
     OTHERS                 = 3.
  IF sy-subrc &amp;lt;&amp;gt; 0 AND sy-subrc NE 3.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  READ TABLE lt_return INTO ls_return
             WITH KEY fieldname = 'FIELDNAME'.
  IF sy-subrc EQ 0.
    c_value = ls_return-fieldval.
  ENDIF.

ENDFORM.                    " d0100_f4_fcode

*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  d0100_event_data_changed
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM d0100_event_data_changed USING er_data_changed
                              TYPE REF TO cl_alv_changed_data_protocol
                                    e_onf4
                                    e_onf4_before
                                    e_onf4_after
                                    i_grid TYPE i.          "#EC *

  DATA: l_text1 TYPE string,
        l_text2 TYPE string,
        l_text3 TYPE string.

  CONCATENATE text-100 e_onf4 INTO l_text3.
  CONCATENATE text-101 e_onf4_before INTO l_text1.
  CONCATENATE text-102 e_onf4_after INTO l_text2.

  DATA: l_event TYPE lvc_fname.                             "#EC NEEDED

  IF gs_test-info_popup_once EQ con_true.
    READ TABLE gs_test-events_info_popup INTO l_event
               WITH KEY table_line = 'DATA_CHANGED'.
    IF sy-subrc NE 0.
      INSERT 'DATA_CHANGED'
             INTO gs_test-events_info_popup INDEX 1.
      MESSAGE i000(0k) WITH text-001
                            l_text3
                            l_text1
                            l_text2.
    ENDIF.
  ELSEIF gs_test-no_info_popup EQ space.
    MESSAGE i000(0k) WITH text-001
                          l_text3
                          l_text1
                          l_text2.
  ENDIF.

  DATA: ls_row TYPE lvc_s_moce.

  LOOP AT er_data_changed-&amp;gt;mt_deleted_rows INTO ls_row.
    CASE i_grid.
      WHEN con_source.
        DELETE gt_outtab_source INDEX ls_row-row_id.
      WHEN con_target.
        DELETE gt_outtab_target INDEX ls_row-row_id.
    ENDCASE.
  ENDLOOP.

*... die Ausgabetabelle ist noch nicht aktualisiert
*    hier sollen semantische Prüfungen zunächst erfolgen über
*      er_data_changed-&amp;gt;mt_good_cells
*    Fehler können dann dem Fehlerprotokoll angehängt werden
*      er_data_changed-&amp;gt;add_protocol_entry
*    Es darf an dieser Stelle kein Refresh erfolgen!

ENDFORM.                    " d0100_event_data_changed

*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  d0100_event_data_changed_finis
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM d0100_event_data_changed_finis .                       "#EC *

  DATA: l_event TYPE lvc_fname.                             "#EC NEEDED

  IF gs_test-info_popup_once EQ con_true.
    READ TABLE gs_test-events_info_popup INTO l_event
               WITH KEY table_line = 'DATA_CHANGED_FINISHED'.
    IF sy-subrc NE 0.
      INSERT 'DATA_CHANGED_FINISHED'
             INTO gs_test-events_info_popup INDEX 1.
      MESSAGE i000(0k) WITH text-002.
    ENDIF.
  ELSEIF gs_test-no_info_popup EQ space.
    MESSAGE i000(0k) WITH text-002.
  ENDIF.

*... die Ausgabetabelle ist nun aktualisiert

ENDFORM.                    " d0100_event_data_changed_finis
&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;  Uwe&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 29 Jun 2008 15:47:40 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/does-alv-support-multiple-lines-drag-drop-functionality/m-p/4115732#M983972</guid>
      <dc:creator>uwe_schieferstein</dc:creator>
      <dc:date>2008-06-29T15:47:40Z</dc:date>
    </item>
  </channel>
</rss>

