Adding a button inside an ALV fields is a very simple task to do which needs only a few line of codes. what I always do is I create a field on ALV and populate that field with an Icon of my choice and declare it as a Hotspot so it will react on a single click and it works perfectly just like a button.
First Thing to do is to specify a field in our internal table that we will use to hold the Icon(refer to code #1).
[codesyntax lang="abap" lines="no" title="CODE #1"]
TYPES: BEGIN OF t_alvbutton,
icon TYPE string, “icon field
kunnr LIKE kna1-kunnr,
name1 LIKE kna1-name1,
END OF t_alvbutton.
DATA: it_alvbutton TYPE STANDARD TABLE OF t_alvbutton,
wa_alvbutton TYPE t_alvbutton.
[/codesyntax]
Proceed to the data retrieval and populate the it_alvbutton. I assume you know how to retrieve data from database so there’s no need to show you the select statement for our example. After that, loop on every records of it_alvbutton to specify the Icon that we want to display(refer to code #2).
[codesyntax lang="abap" lines="no" title="CODE #2"]
LOOP AT it_alvbutton INTO wa_alvbutton.
wa_alvbutton-icon = ‘@0X@’.
MODIFY it_alvbutton FROM wa_alvbutton.
ENDLOOP.
[/codesyntax]
@0X@ is the code for print icon. For the complete list of icons, check it out here.
Now the important part is to define a field in ALV that will hold the icon. To show you how simple it is to do that, please refer to code #3.
[codesyntax lang="abap" lines="no" title="CODE #3" escaped="true"]
DATA: ls_fieldcat TYPE slis_fieldcat_alv,
lt_fieldcat TYPE slis_t_fieldcat_alv.
DEFINE m_fieldcat.
add 1 to ls_fieldcat-col_pos.
ls_fieldcat-fieldname = &1.
ls_fieldcat-seltext_l = &2.
ls_fieldcat-outputlen = &3.
ls_fieldcat-hotspot = &4. “X to declare the field as a hotspot
ls_fieldcat-icon = &5. “X to declare the field as an icon
append ls_fieldcat to lt_fieldcat.
END-OF-DEFINITION.
m_fieldcat 'ICON' 'Print' '20' 'X' 'X'. “this specific field is a hotspot and an icon
m_fieldcat 'KUNNR' 'Customer No.' '10'.
m_fieldcat 'NAME1' 'Customer Name' '35'.
m_fieldcat . . .
m_fieldcat . . .
CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY’
. . .
. . .
[/codesyntax]
The figure below shows an example of print icon as a button.

Now refer to code #4 to handle the command when a user clicks on the icon button.
[codesyntax lang="abap" lines="no" title="CODE #4" escaped="true"]
FORM f_user_command USING ucomm LIKE sy-ucomm
v_selfld TYPE slis_selfield.
IF ucomm = '&IC1' AND v_selfld-fieldname = 'ICON'.
“code goes in here when user clicks on our print button
ENDIF.
[/codesyntax]

Oh.. very useful.. Thanks for this Tip.. I will pass this tip to my colleague
How can you know that ucomm = ‘&IC1′?
and how can i capture which row that icon is pressed?
thanks
mokmok
@MokMok
ucomm ‘&IC1′ is from SAPLSLVC_FULLSCREEN program. It is what you get when you use REUSE_ALV_GRID_DISPLAY function module to display alv and calls the method for double click.
Based on the example above, under the FORM f_user_command, add the code below to capture the current row to a work area:
read table it_alvbutton into wa_alvbutton index v_selfld-tabindex.
Extremely helpful … thanks a lot !!!
One query - can u suggest a way to add a push button below an alv grid … i could not find any (ofcourse, not OOPS). Thanks!