среда, 13 ноября 2013 г.

Cоздать редактируемый checkbox в CL_SALV_TABLE.

ALV Object CL_SALV_TABLE не поддерживает редактируемых ячеек, редактируемых столбцов или строк. Но если нельзя, но очень надо, то можно...

report  z_test_lna.
класс для обработки действий пользователя
class lcl_handle_events definition deferred.
Объявляем объект типа cl_salv_table, который выведет наши данные в виде ALV
datagc_alv_table type ref to cl_salv_table.
datagc_columns   type ref to cl_salv_columns_table.
datagc_colwork   type ref to cl_salv_column_table.
Таблица с данными для вывода в ALV
databegin of gt_mkpf occurs 10,
checkbox,
mblnr 
type mkpf-mblnr,
mjahr 
type mkpf-mjahr,
vgart 
type mkpf-vgart,
blart 
type mkpf-blart,
blaum 
type mkpf-blaum,
bldat 
type mkpf-bldat,
budat 
type mkpf-budat,
cpudt 
type mkpf-cpudt,
cputm 
type mkpf-cputm,
aedat 
type mkpf-aedat,
usnam 
type mkpf-usnam,
tcode 
type mkpf-tcode,
frath 
type mkpf-frath,
      
end of gt_mkpf.
data wa_mkpf like line of gt_mkpf.
*----------------------------------------------------------------------*
*       CLASS lcl_handle_events DEFINITION
*----------------------------------------------------------------------*
class lcl_handle_events definition.
  
public section.
    
methods:
      on_link_click 
for event link_click of cl_salv_events_table
    
importing row column.
endclass.                    "lcl_handle_events DEFINITION
*---------------------------------------------------------------------*
*       CLASS lcl_handle_events IMPLEMENTATION
*---------------------------------------------------------------------*
class lcl_handle_events implementation.
  
method on_link_click.
* Тут весь секрет)
    
if row <> 0.
      
if column 'CHECKBOX'.
        
read table gt_mkpf into wa_mkpf index row.
        
if sy-subrc eq 0.
          
case wa_mkpf-checkbox.
            
when 'X'.
              
clear wa_mkpf-checkbox.
            
when others.
              wa_mkpf
-checkbox 'X'.
          
endcase.
        
endif.
        
modify gt_mkpf from wa_mkpf index row transporting checkbox.


        
gc_alv_table->refresh( ). "Нужно для обработки изменения в экране.
      
else.
        
break-point.
        gc_alv_table
->refresh( ). "Нужно для обработки изменения в экране.
      
endif.
    
else.

      
"...
    
endif.
  
endmethod.                    "on_single_click
endclass.                    "lcl_handle_events IMPLEMENTATION
datagr_events type ref to lcl_handle_events.
datagc_events type ref to cl_salv_events_table.
start-of-selection.
Выбираем данные
  
select into corresponding fields of table gt_mkpf from mkpf
    
where mblnr '10490000000'.
Статический метод класса для создания объекта и связывания с нашей таблицей
  cl_salv_table
=>factoryimporting r_salv_table gc_alv_table
                          
changing t_table gt_mkpf[] ).
Получим каталог полей таблицы
  gc_columns 
gc_alv_table->get_columns( ).
Получим поле по имени
  gc_colwork ?= gc_columns
->get_column'CHECKBOX' ).
Объявляем наш checkbox как checkbox-ссылка
  gc_colwork
->set_cell_typeif_salv_c_cell_type=>checkbox_hotspot ).
*Создание объекта обработки
  
create object gr_events.
Получить события для таблицы
  gc_events 
gc_alv_table->get_event( ).
    
set handler gr_events->on_link_click for gc_events.
Вывести ALV-таблицу на экран
  gc_alv_table
->display( ).

результат



Комментариев нет:

Отправить комментарий