View previous topic :: View next topic |
Author |
Message |
stn Участник

Joined: 18 Jan 2008 Posts: 31
|
Posted: Tue Jan 29, 2008 10:02 am Post subject: Отключение Checkbox в ALV |
|
|
Утро доброе!
Создал ALV с колонками в виде checkbox. Каким образом можно сделать неактивными checkbox в некоторых, нужных мне строках? |
|
Back to top |
|
 |
John Doe Модератор


Age: 46 Joined: 05 Nov 2007 Posts: 725 Location: КраснАдар
|
Posted: Tue Jan 29, 2008 12:04 pm Post subject: |
|
|
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 |
|
 |
stn Участник

Joined: 18 Jan 2008 Posts: 31
|
Posted: Tue Jan 29, 2008 10:36 pm Post subject: |
|
|
John Doe, теперь понятно, спасибо. |
|
Back to top |
|
 |
Lord Профессионал


Joined: 10 Sep 2007 Posts: 168
|
Posted: Wed Jan 30, 2008 9:41 pm Post subject: |
|
|
Еще пример с 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 |
|
 |
luka_rus Участник

Joined: 21 Jan 2008 Posts: 35
|
Posted: Thu Jan 31, 2008 1:24 pm Post subject: |
|
|
А для REUSE_ALV_GRID_DISPLAY решение есть? |
|
Back to top |
|
 |
vga Мастер


Age: 126 Joined: 04 Oct 2007 Posts: 1218 Location: Санкт-Петербург
|
Posted: Thu Jan 31, 2008 11:28 pm Post subject: |
|
|
Внутри REUSE_ALV_GRID_DISPLAY grid все равно объектный. С помощью FM 'GET_GLOBALS_FROM_SLVC_FULLSCR'
можно получить ссылку на объект грида и управлять checkbox.
http://www.sapnet.ru/viewtopic.php?t=666 |
|
Back to top |
|
 |
luka_rus Участник

Joined: 21 Jan 2008 Posts: 35
|
Posted: Fri Feb 01, 2008 7:57 am Post subject: |
|
|
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 такого поля нет.  |
|
Back to top |
|
 |
vga Мастер


Age: 126 Joined: 04 Oct 2007 Posts: 1218 Location: Санкт-Петербург
|
Posted: Fri Feb 01, 2008 1:22 pm Post subject: |
|
|
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 |
|
 |
John Doe Модератор


Age: 46 Joined: 05 Nov 2007 Posts: 725 Location: КраснАдар
|
Posted: Fri Feb 01, 2008 1:26 pm Post subject: |
|
|
luka_rus wrote: |
А как сделать это:
Код:
LAYOUT-STYLEFNAME = 'CELLSTYLE'.
В REUSE_ALV_GRID_DISPLAY в LAYOUT такого поля нет.  |
Да, в SLIS такого поля нет. Послушайте совета vga и перепишите на REUSE_ALV_GRID_DISPLAY_LVC. |
|
Back to top |
|
 |
wax Участник

Joined: 29 Nov 2007 Posts: 2
|
Posted: Tue May 13, 2008 7:26 pm Post subject: |
|
|
В таком случае вы не могли бы дать пример реализации изменения данных и обновления ALV после этого изменения используя REUSE_ALV_GRID_DISPLAY_LVC? |
|
Back to top |
|
 |
John Doe Модератор


Age: 46 Joined: 05 Nov 2007 Posts: 725 Location: КраснАдар
|
Posted: Tue May 13, 2008 9:40 pm Post subject: |
|
|
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 |
|
 |
wax Участник

Joined: 29 Nov 2007 Posts: 2
|
Posted: Wed May 14, 2008 11:51 am Post subject: |
|
|
спасибо, всё работает  |
|
Back to top |
|
 |
|