ALV 操作实例

来源:互联网 发布:纯真ip数据库 mysql 编辑:程序博客网 时间:2024/06/14 20:32

界面如下:

 

 

 

实现过程大致如下:

STTRIBUTES:ALV_MODEL TYPE REF TO  CL_SALV_WD_CONFIG_TABLE

METHODS:INIT_ALV_CONFIG 作用:ALV列表内容初始化设置

 

METHOD init_alv_config .
  DATA lo_cmp_usage TYPE REF TO if_wd_component_usage.
  lo_cmp_usage =   wd_this->wd_cpuse_alv_table( ).
  IF lo_cmp_usage->has_active_component( ) IS INITIAL.
    lo_cmp_usage->create_component( ).
  ENDIF.

  DATA lo_interface TYPE REF TO iwci_salv_wd_table.
  lo_interface = wd_this->wd_cpifc_alv_table( ).

  DATA lr_column_settings TYPE REF TO if_salv_wd_column_settings.
  lr_column_settings ?= wd_this->alv_model.
  DATA lt_columns TYPE salv_wd_t_column_ref.
  DATA ls_column TYPE salv_wd_s_column_ref.
  DATA lr_column TYPE REF TO cl_salv_wd_column.
  DATA lr_column_id TYPE string.
  DATA lr_header TYPE REF TO cl_salv_wd_column_header.
  DATA: lr_input_field TYPE REF TO cl_salv_wd_uie_input_field,
        lr_checkbox TYPE REF TO cl_salv_wd_uie_checkbox,
        lr_image TYPE REF TO cl_salv_wd_uie_image,
        lr_dropdown_by_key TYPE REF TO cl_salv_wd_uie_dropdown_by_key.
  lt_columns = lr_column_settings->get_columns( ).

  LOOP AT lt_columns INTO ls_column.
    lr_column_id = ls_column-id.
    lr_column = ls_column-r_column.
    lr_header  = lr_column->create_header( ).

    CASE lr_column_id.
      WHEN 'Z_IMAGE'.
        lr_header->set_text( ' ' ).
        lr_column->set_width( '50' ).
        CREATE OBJECT lr_image.
        lr_image->set_source_fieldname( 'Z_IMAGE' ).
        lr_column->set_cell_editor( lr_image ).
        lr_column->set_h_align( cl_wd_table_column=>e_h_align-center ).
      WHEN 'Z_ORDER'.
        lr_header->set_text( '序号' ).
        lr_column->set_width( '50' ).
        lr_column->set_h_align( cl_wd_table_column=>e_h_align-center ).
        lr_column->set_cell_design_fieldname( 'ZF_COLOR' ).
      WHEN 'Z_PLAY_DATE'.
        lr_header->set_text( '播出日期' ).
        CREATE OBJECT lr_input_field
          EXPORTING
            value_fieldname = lr_column_id.
        lr_input_field->set_read_only( abap_false ).
        lr_input_field->set_alignment( cl_wd_table_column=>e_h_align-center ).
        lr_column->set_width( '70' ).
        lr_column->set_cell_editor( lr_input_field ).
        lr_column->set_h_align( cl_wd_table_column=>e_h_align-center ).
        lr_column->set_cell_design_fieldname( 'ZF_PLAY_DATE' ).
      WHEN 'Z_REP_FLAG'.
        lr_header->set_text( '首/重播' ).
        CREATE OBJECT lr_dropdown_by_key
          EXPORTING
            selected_key_fieldname = lr_column_id.
        lr_dropdown_by_key->set_key_visible( abap_false ).
        lr_column->set_width( '70' ).
        lr_column->set_h_align( cl_wd_table_column=>e_h_align-center ).
        lr_column->set_cell_editor( lr_dropdown_by_key ).
      WHEN 'Z_SPECIAL_FLAG'.
        lr_header->set_text( '重点节目' ).
        CREATE OBJECT lr_checkbox
          EXPORTING
            checked_fieldname = lr_column_id.
        lr_checkbox->set_read_only( abap_true ).
        lr_column->set_width( '70' ).
        lr_column->set_cell_editor( lr_checkbox ).
        lr_column->set_h_align( cl_wd_table_column=>e_h_align-center ).

 

      .....................


      WHEN OTHERS.
        lr_column->set_visible( cl_wd_uielement=>e_visible-none ).
    ENDCASE.
  ENDLOOP.

ENDMETHOD.

METHODS:INIT_ALV_DISPLAY 作用: 显示设置,BT设置

  METHOD init_alv_display .
  DATA lo_cmp_usage TYPE REF TO if_wd_component_usage.
  lo_cmp_usage =   wd_this->wd_cpuse_alv_table( ).
  IF lo_cmp_usage->has_active_component( ) IS INITIAL.
    lo_cmp_usage->create_component( ).
  ENDIF.
  DATA lo_interface TYPE REF TO iwci_salv_wd_table.
  lo_interface = wd_this->wd_cpifc_alv_table( ).
  wd_this->alv_model = lo_interface->get_model( ).

  wd_this->alv_model->if_salv_wd_table_settings~set_scrollable_col_count( 10 ).
  wd_this->alv_model->if_salv_wd_table_settings~set_read_only( abap_false ).
  wd_this->alv_model->if_salv_wd_table_settings~set_width( '100%' ).
  wd_this->alv_model->if_salv_wd_table_settings~set_cell_action_event_enabled( ).
  wd_this->alv_model->if_salv_wd_table_settings~set_visible_row_count( 8 ).
  wd_this->alv_model->if_salv_wd_table_settings~set_fixed_table_layout( abap_true ).
  wd_this->alv_model->if_salv_wd_std_functions~set_edit_check_available( abap_false ).
  wd_this->alv_model->if_salv_wd_std_functions~set_edit_append_row_allowed( abap_false ).
  wd_this->alv_model->if_salv_wd_std_functions~set_edit_insert_row_allowed( abap_false ).
  wd_this->alv_model->if_salv_wd_std_functions~set_edit_delete_row_allowed( abap_false ).
  wd_this->alv_model->if_salv_wd_std_functions~set_pdf_allowed( abap_false ).
  wd_this->alv_model->if_salv_wd_std_functions~set_export_allowed( abap_false ).
  wd_this->alv_model->if_salv_wd_table_settings~set_selection_mode( cl_wd_table=>e_selection_mode-multi ).
  wd_this->alv_model->if_salv_wd_table_settings~set_cell_action_event_enabled( abap_true ) .

  DATA lr_function_setting TYPE REF TO if_salv_wd_function_settings.
  lr_function_setting = wd_this->alv_model.
  DATA: lr_button TYPE REF TO cl_salv_wd_fe_button.
  DATA: lr_function1 TYPE REF TO cl_salv_wd_function.

*  报播辅助开关
  lr_function1 = lr_function_setting->create_function( 'FROM_SUB' ).
  CREATE OBJECT lr_button.
  lr_button->set_text( '报播辅助开关' ).
  lr_function1->set_editor( lr_button ).

*  新建空白条目
  lr_function1 = lr_function_setting->create_function( 'CREAT_SUB' ).
  CREATE OBJECT lr_button.
  lr_button->set_text( '新建空白条目' ).
  lr_function1->set_editor( lr_button ).

*  复制条目
  lr_function1 = lr_function_setting->create_function( 'COPY_SUB' ).
  CREATE OBJECT lr_button.
  lr_button->set_text( '复制条目' ).
  lr_function1->set_editor( lr_button ).

*  删除条目
  lr_function1 = lr_function_setting->create_function( 'DELETE_SUB' ).
  CREATE OBJECT lr_button.
  lr_button->set_text( '删除条目' ).
  lr_function1->set_editor( lr_button ).
ENDMETHOD.

 METHODS:ON_ALV_FUNCTION 继承ALV_TALBE上 ON_FUNCTION 作用: ALV 上BT的单击事件

  METHOD on_alv_function .
  CASE r_param->id.
    WHEN 'FROM_SUB'.  "报播辅助开关
      wd_this->on_from_sub( ).
    WHEN 'CREAT_SUB'.  "新建空白条目
      wd_this->on_creat_sub( ).
    WHEN 'COPY_SUB'.    "复制条目
      wd_this->on_copy_sub( ).
    WHEN 'DELETE_SUB'.  "删除条目
      wd_this->on_delete_sub( ).
  ENDCASE.
ENDMETHOD.

 METHODS:ON_ALV_CELL 继承ALV_TALBE上ON_CELL_ACTION  作用: ALV CELL上的事件

   METHOD on_alv_cell .

 
  DATA lo_nd_t_bb_bbd TYPE REF TO if_wd_context_node.
  DATA lo_el_t_bb_bbd TYPE REF TO if_wd_context_element.
  DATA ls_t_bb_bbd TYPE wd_this->element_t_bb_bbd.
  DATA lt_t_bb_bbd TYPE wd_this->elements_t_bb_bbd.
  lo_nd_t_bb_bbd = wd_context->get_child_node( name = wd_this->wdctx_t_bb_bbd ).
  lo_el_t_bb_bbd = lo_nd_t_bb_bbd->get_element(  ).
* get all declared attributes
  lo_el_t_bb_bbd->get_static_attributes( IMPORTING static_attributes = ls_t_bb_bbd ).
  lo_nd_t_bb_bbd->get_static_attributes_table( IMPORTING table = lt_t_bb_bbd ).

  ...
  DATA ls_bb_pro TYPE zcdm_s_bb_pro.
  READ TABLE lt_t_bb_bbd INDEX r_param->index INTO ls_t_bb_bbd.

  CASE r_param->column.
      ....
      WHEN 'Z_PLAY_TIME'.
        IF ls_t_bb_bbd-z_play_time IS INITIAL.

        "处理
        ENDIF.
      WHEN 'Z_PLAYROOM'.
   ENDCASE.
   ........



    MODIFY lt_t_bb_bbd FROM ls_t_bb_bbd INDEX r_param->index  .
    lo_nd_t_bb_bbd->bind_table(  lt_t_bb_bbd ).
    lo_nd_t_bb_bbd->set_lead_selection_index( r_param->index ).
   "设置当前行为选中行

 

 ENDMETHOD.

 

  METHODS:ON_COPY_SUB  作用: 复制已选择ALV行

   METHOD on_copy_sub .
  DATA element_set TYPE wdr_context_element_set.
  DATA lo_nd_t_bb_bbd TYPE REF TO if_wd_context_node.
  DATA lo_el_t_bb_bbd TYPE REF TO if_wd_context_element.
  DATA ls_t_bb_bbd TYPE wd_this->element_t_bb_bbd.
  DATA lt_t_bb_bbd TYPE wd_this->elements_t_bb_bbd.
  DATA t_bb_bbd TYPE wd_this->elements_t_bb_bbd.
  DATA lv_z_order LIKE ls_t_bb_bbd-z_order.

  lo_nd_t_bb_bbd = wd_context->get_child_node( name = wd_this->wdctx_t_bb_bbd ).
  lo_el_t_bb_bbd = lo_nd_t_bb_bbd->get_element(  ).
  lo_nd_t_bb_bbd->get_static_attributes_table( IMPORTING  table = lt_t_bb_bbd ).

  element_set = lo_nd_t_bb_bbd->get_selected_elements( including_lead_selection = abap_true  ).
  DATA l_index type i .
  LOOP AT element_set INTO lo_el_t_bb_bbd .
    l_index = lo_el_t_bb_bbd->GET_INDEX( ).
    lo_el_t_bb_bbd->get_static_attributes( IMPORTING static_attributes = ls_t_bb_bbd ).
    insert ls_t_bb_bbd INTO lt_t_bb_bbd INDEX l_index .
  ENDLOOP.

  LOOP AT lt_t_bb_bbd INTO ls_t_bb_bbd .
    ls_t_bb_bbd-z_order = sy-tabix.
    MODIFY lt_t_bb_bbd FROM ls_t_bb_bbd.
  ENDLOOP.
  lo_nd_t_bb_bbd->bind_table( new_items = lt_t_bb_bbd  ).

ENDMETHOD.                    "ON_COPY_SUB