SAP R/3 форум ABAP консультантов
Russian ABAP Developer's Club

Home - FAQ - Search - Memberlist - Usergroups - Profile - Log in to check your private messages - Register - Log in - English
Blogs - Weblogs News

Отключение Checkbox в ALV



 
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP
View previous topic :: View next topic  
Author Message
stn
Участник
Участник



Joined: 18 Jan 2008
Posts: 31

PostPosted: Tue Jan 29, 2008 10:02 am    Post subject: Отключение Checkbox в ALV Reply with quote

Утро доброе!
Создал ALV с колонками в виде checkbox. Каким образом можно сделать неактивными checkbox в некоторых, нужных мне строках?
Back to top
View user's profile Send private message
John Doe
Модератор
Модератор


Age: 45
Joined: 05 Nov 2007
Posts: 725
Location: КраснАдар

PostPosted: Tue Jan 29, 2008 12:04 pm    Post subject: Reply with quote

1. Расширьте свою внутреннюю табличку техническим полем CELLSTYLE TYPE LVC_T_STYL.
2. В цикле по табличке заполните ее согласно своим условиям
Code:
DATA: LS_STYLE TYPE LVC_S_STYL.
LOOP AT ITAB.
  IF ITAB-... = ...
    LS_STYLE-FIELDNAME = 'your_checkbox_field'.
    LS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED. " Включено редактирование
  ELSE.
    LS_STYLE-FIELDNAME = 'your_checkbox_field'.
    LS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. " Выключено редактирование
  ENDIF.
  APPEND LS_STYLE TO ITAB-CELLSTYLE.
ENDLOOP.

3. В LAYOUT не забываем прописывать
Code:
LAYOUT-STYLEFNAME = 'CELLSTYLE'.

4. Показываем табличку и смотрим, что получилось
Code:
    CALL METHOD GRID_CONTROL->SET_TABLE_FOR_FIRST_DISPLAY
      EXPORTING
        IS_LAYOUT                     = LAYOUT
      CHANGING
        IT_OUTTAB                     = ITAB[]
        IT_FIELDCATALOG               = FCAT.

5. Значения в нашем техническом поле можно менять в ходе выполнения программы, не забывая делать после этого REFRESH_TABLE_DISPLAY. Тем самым полностью регулируется возможность ввода в конкретные ячейки грида.
Back to top
View user's profile Send private message Blog
stn
Участник
Участник



Joined: 18 Jan 2008
Posts: 31

PostPosted: Tue Jan 29, 2008 10:36 pm    Post subject: Reply with quote

John Doe, теперь понятно, спасибо.
Back to top
View user's profile Send private message
Lord
Профессионал
Профессионал



Joined: 10 Sep 2007
Posts: 168

PostPosted: Wed Jan 30, 2008 9:41 pm    Post subject: Reply with quote

Еще пример с sapfans

Quote:
U can do that using ABAP OBJECTS, chk program BCALV_EDIT_05

If we use the checkbox field concept, by using the layout-box_fieldname concept, then we can do what u require.

we have to set the field in internal table (for checkbox purpose)

= 1 (checkbox is CHECKED and disabled)
= X (checkbox is CHECKED and enabled)
= blank (for unchecked and enabled)
= 0 (checkbox is unchecked and disabled)

Code:
REPORT z_checkbox.
TYPE-POOLS : slis.

* Data
DATA : BEGIN OF itab OCCURS 0.
  INCLUDE STRUCTURE t001.
  DATA : flag tyPE c,
END OF itab.
DATA : alvfc TYPE slis_t_fieldcat_alv.
DATA : alvly TYPE slis_layout_alv.

* Select Data
SELECT * FROM t001 INTO TABLE itab.

LOOP AT ITAB.
  IF SY-TABIX = 1.
    ITAB-FLAG = '1'.
    MODIFY ITAB.
  ENDIF.
  IF SY-TABIX = 2.
    ITAB-FLAG = 'X'.
    MODIFY ITAB.
  ENDIF.

  IF SY-TABIX = 3.
    ITAB-FLAG = '0'.
    MODIFY ITAB.
  ENDIF.
ENDLOOP.

*Field Catalogue
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
  EXPORTING
    i_program_name = sy-repid
    i_internal_tabname = 'ITAB'
    i_inclname = sy-repid
  CHANGING
    ct_fieldcat = alvfc
  EXCEPTIONS
    inconsistent_interface = 1
    program_error = 2
    OTHERS = 3.

*---------------Display
alvly-box_fieldname = 'FLAG'.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
  EXPORTING
    it_fieldcat = alvfc
    i_callback_program = sy-repid "<--Important
    i_callback_user_command = 'ITAB_USER_COMMAND' "<--     Important
    is_layout = alvly
  TABLES
    t_outtab = itab
  EXCEPTIONS
    program_error = 1
    OTHERS = 2.

*-------------------------------------------------
CALL BACK FORM
*-------------------------------------------------

FORM itab_user_command
  USING whatcomm TYPE sy-ucomm
             whatrow TYPE slis_selfield.

  DATA: msg(100) type c.

  LOOP AT itab.
    IF itab-flag = 'X'.
      msg = sy-tabix.
      condense msg.
      concatenate 'Row Number ' msg ' ' into msg
      separated by space.
      message msg type 'I'.
    ENDIF.
  ENDLOOP.

ENDFORM. "ITAB_user_command
Back to top
View user's profile Send private message
luka_rus
Участник
Участник



Joined: 21 Jan 2008
Posts: 35

PostPosted: Thu Jan 31, 2008 1:24 pm    Post subject: Reply with quote

А для REUSE_ALV_GRID_DISPLAY решение есть?
Back to top
View user's profile Send private message
vga
Мастер
Мастер


Age: 195
Joined: 04 Oct 2007
Posts: 1218
Location: Санкт-Петербург

PostPosted: Thu Jan 31, 2008 11:28 pm    Post subject: Reply with quote

Внутри REUSE_ALV_GRID_DISPLAY grid все равно объектный. С помощью FM 'GET_GLOBALS_FROM_SLVC_FULLSCR'
можно получить ссылку на объект грида и управлять checkbox.

http://www.sapnet.ru/viewtopic.php?t=666
Back to top
View user's profile Send private message Blog Visit poster's website
luka_rus
Участник
Участник



Joined: 21 Jan 2008
Posts: 35

PostPosted: Fri Feb 01, 2008 7:57 am    Post subject: Reply with quote

vga wrote:
Внутри REUSE_ALV_GRID_DISPLAY grid все равно объектный. С помощью FM 'GET_GLOBALS_FROM_SLVC_FULLSCR'
можно получить ссылку на объект грида и управлять checkbox.

http://www.sapnet.ru/viewtopic.php?t=666


А как сделать это:

Код:
LAYOUT-STYLEFNAME = 'CELLSTYLE'.

В REUSE_ALV_GRID_DISPLAY в LAYOUT такого поля нет. Question
Back to top
View user's profile Send private message
vga
Мастер
Мастер


Age: 195
Joined: 04 Oct 2007
Posts: 1218
Location: Санкт-Петербург

PostPosted: Fri Feb 01, 2008 1:22 pm    Post subject: Reply with quote

Code:
REPORT z_checkbox_disable.
DATA: l_f_repid LIKE sy-repid.
DATA: l_t_fieldcat TYPE lvc_t_fcat,
l_r_fieldcat TYPE lvc_s_fcat.

CLASS cl_gui_alv_grid DEFINITION LOAD.
DATA: BEGIN OF itab OCCURS 0,
       cb,
       f1,
       f2(10),
       style TYPE lvc_t_styl,
END OF itab.
DATA: ls_style TYPE lvc_s_styl.
DATA: ls_layo TYPE lvc_s_layo.
ls_layo-stylefname = 'STYLE'.

itab-f1 = 'S'.
itab-f2 = 'Test'.
APPEND itab.
CLEAR itab.

itab-f1 = 'V'.
itab-f2 = 'Test1'.
APPEND itab.
CLEAR itab.

itab-f1 = 'S'.
itab-f2 = 'Test2'.
APPEND itab.
CLEAR itab.

l_r_fieldcat-col_pos = 1.
l_r_fieldcat-tabname = 'ITAB'.
l_r_fieldcat-fieldname = 'CB'.
l_r_fieldcat-checkbox = 'X'.
l_r_fieldcat-edit = 'X'.
APPEND l_r_fieldcat TO l_t_fieldcat .
CLEAR l_r_fieldcat.

l_r_fieldcat-col_pos = 2.
l_r_fieldcat-tabname = 'ITAB'.
l_r_fieldcat-fieldname = 'F1'.
APPEND l_r_fieldcat TO l_t_fieldcat .
CLEAR l_r_fieldcat.

l_r_fieldcat-col_pos = 3.
l_r_fieldcat-tabname = 'ITAB'.
l_r_fieldcat-fieldname = 'F2'.
APPEND l_r_fieldcat TO l_t_fieldcat .
CLEAR l_r_fieldcat.
LOOP AT itab.
  IF itab-f1 = 'S'.
    ls_style-fieldname = 'CB'.
    ls_style-style = cl_gui_alv_grid=>mc_style_button .
    ls_style-style = cl_gui_alv_grid=>mc_style_disabled.
    APPEND ls_style TO itab-style.
    CLEAR ls_style.
  ELSE.
    CLEAR itab-style.
  ENDIF.
  MODIFY itab.
ENDLOOP.

l_f_repid = sy-repid.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
     EXPORTING
          i_callback_program = l_f_repid
          is_layout_lvc      = ls_layo
          it_fieldcat_lvc    = l_t_fieldcat
     TABLES
          t_outtab           = itab.
Back to top
View user's profile Send private message Blog Visit poster's website
John Doe
Модератор
Модератор


Age: 45
Joined: 05 Nov 2007
Posts: 725
Location: КраснАдар

PostPosted: Fri Feb 01, 2008 1:26 pm    Post subject: Reply with quote

luka_rus wrote:

А как сделать это:

Код:
LAYOUT-STYLEFNAME = 'CELLSTYLE'.

В REUSE_ALV_GRID_DISPLAY в LAYOUT такого поля нет. Question


Да, в SLIS такого поля нет. Послушайте совета vga и перепишите на REUSE_ALV_GRID_DISPLAY_LVC.
Back to top
View user's profile Send private message Blog
wax
Участник
Участник



Joined: 29 Nov 2007
Posts: 2

PostPosted: Tue May 13, 2008 7:26 pm    Post subject: Reply with quote

В таком случае вы не могли бы дать пример реализации изменения данных и обновления ALV после этого изменения используя REUSE_ALV_GRID_DISPLAY_LVC?
Back to top
View user's profile Send private message
John Doe
Модератор
Модератор


Age: 45
Joined: 05 Nov 2007
Posts: 725
Location: КраснАдар

PostPosted: Tue May 13, 2008 9:40 pm    Post subject: Reply with quote

to wax - А это собственно ответ - 4 поста выше :
vga wrote:
Внутри REUSE_ALV_GRID_DISPLAY grid все равно объектный. С помощью FM 'GET_GLOBALS_FROM_SLVC_FULLSCR'
можно получить ссылку на объект грида и управлять checkbox.

http://www.sapnet.ru/viewtopic.php?t=666

Получаем инстанцию объектного грида, а дальше работаем с методами класса CL_GUI_ALV_GRID
Back to top
View user's profile Send private message Blog
wax
Участник
Участник



Joined: 29 Nov 2007
Posts: 2

PostPosted: Wed May 14, 2008 11:51 am    Post subject: Reply with quote

спасибо, всё работает Smile
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG.
SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG.
Every effort is made to ensure content integrity. Use information on this site at your own risk.