Выпадающий список работает следующим способом.
1. К полю с выпадающим списком создаётся доп. поле с идентификатором требуемого списка.
Code:
DATA: BEGIN OF gt_outtab OCCURS 0.
INCLUDE STRUCTURE sflight .
DATA: drop_down_handle TYPE int4. "dropdown handle for a field
DATA: END OF gt_outtab.
2. В каталоге полей указывается, что к такому-то полю есть идентификатор списка:
Code:
gs_fieldcat-edit = 'X'.
gs_fieldcat-drdn_field = 'DROP_DOWN_HANDLE'.
MODIFY gt_fieldcat FROM gs_fieldcat INDEX sy-tabix.
3. Заполняется табличка для ВСЕХ используемых в гриде дропдаун боксов:
Code:
DATA: lt_dropdown TYPE lvc_t_drop,
ls_dropdown TYPE lvc_s_drop.
ls_dropdown-handle = '1'.
ls_dropdown-value = '445'.
APPEND ls_dropdown TO lt_dropdown.
ls_dropdown-handle = '1'.
ls_dropdown-value = '495'.
APPEND ls_dropdown TO lt_dropdown.
ls_dropdown-handle = '2'.
ls_dropdown-value = '220'.
APPEND ls_dropdown TO lt_dropdown.
ls_dropdown-handle = '2'.
ls_dropdown-value = '155'.
APPEND ls_dropdown TO lt_dropdown.
ls_dropdown-handle = '2'.
ls_dropdown-value = '200'.
APPEND ls_dropdown TO lt_dropdown.
4. Табличка передаётся в грид:
Code:
CALL METHOD my_grid->set_drop_down_table
EXPORTING
it_drop_down = lt_dropdown.
5. В отображаемой таблице заполняется требуемый идентификатор списка значений к полю:
Code:
LOOP AT gt_outtab INTO gs_outtab.
IF gs_outtab-connid = '0017'.
gs_outtab-drop_down_handle = 1.
ELSEif gs_outtab-connid = '0026'..
gs_outtab-drop_down_handle = 2.
ENDIF.
MODIFY gt_outtab FROM gs_outtab INDEX sy-tabix.
ENDLOOP.
6. Отображается грид.
Основные отличия от listbox:
1. Нет пар Значение-Текст. Есть только значения. То, что выбирается в списке, то и попадает в ячейку.
2. Можно в разных строках для одного и того же поля выводить разные списки значений или не выводить вообще.
3. Для совершенно разных полей можешь использовать один и тот же список, указав один и тот же handle.
ЗЫ Если чего не так - поправьте