登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

原来为了你

我的人生就是要一次次的超越

 
 
 

日志

 
 
 
 

OO alv数据改变事件-回车触发、移动单元格触发  

2011-01-07 15:50:33|  分类: ALV |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

"运行这个程序前先双击call screen 0100 .建立屏幕。这个程序只用到屏幕,而没用控件,注意逻辑流和OK_CODE的添加
report  z_barry_alv_datachanged.
databegin of itab occurs ,
        carrid 
like spfli-carrid,
        connid 
like spfli-connid,
        cityfrom 
like spfli-cityfrom,
        cityto 
like spfli-cityto,
      
end of itab .

dataok_code like sy-ucomm .
datal_valid(1type c.

datago_grid             type ref to cl_gui_alv_grid,
      go_custom_container 
type ref to cl_gui_custom_container.
datagt_fieldcat type lvc_t_fcat,
      gs_fieldcat 
type lvc_s_fcat,
      gs_variant  
type disvariant,
      gt_filt     
type lvc_t_filt,
      gs_filt     
type lvc_s_filt,
      sla         
type lvc_s_layo.

class lcl_event_receiver definition deferred .
dataevent_receiver type ref to lcl_event_receiver.

*---------------------------------------------------------------------*
*       CLASS lcl_event_receiver DEFINITION
*---------------------------------------------------------------------*
class lcl_event_receiver definition.
  
public section.
    
methods handle_data_changed
        
for event data_changed of cl_gui_alv_grid
            
importing er_data_changed.
endclass.                    "lcl_event_receiver DEFINITION

*---------------------------------------------------------------------*
*       CLASS lcl_event_receiver IMPLEMENTATION
*---------------------------------------------------------------------*
class lcl_event_receiver implementation.
  
method handle_data_changed.
    
perform handle_data_changed using er_data_changed.
  
endmethod.                    "handle_data_changed
endclass.                    "lcl_event_receiver IMPLEMENTATION

initialization.
*  gd_repid = sy-repid.
  
perform fieldcat_init using gt_fieldcat[].

start
-of-selection.
  
call screen 0100 .

*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
module user_command_0100 input.
  
case ok_code.
    
when '&F03'.
      
leave program.
    
when 'ENTE'.
      
perform enter.
    
when 'CHANGE'."改变模式为查看或修改
      
perform change.
    
when '&DATA_SAVE'.
      
MESSAGE 'save' type 'I'.
  
endcase.
  
clear ok_code .
endmodule.                 " USER_COMMAND_0100  INPUT

*&---------------------------------------------------------------------*
*&      Form  load_data_into_grid
*&---------------------------------------------------------------------*
form load_data_into_grid.
  
select from spfli into corresponding fields of table itab
  
up to 20 rows .

  sla
-cwidth_opt 'X'.
  sla
-zebra      'X'.
  sla
-no_toolbar 'X'."隐藏全部标准按钮
  
call method go_grid->set_table_for_first_display
    
exporting
      is_variant                    
gs_variant
      i_save                        
'A'
      is_layout                     
sla
    
changing
      it_outtab                     
itab[]
      it_fieldcatalog               
gt_fieldcat[]
    
exceptions
      invalid_parameter_combination 
1
      program_error                 
2
      too_many_lines                
3
      
others                        4.

  
call method go_grid->set_ready_for_input "处于编辑状态
    
exporting
      i_ready_for_input 
1.

  
call method cl_gui_control=>set_focus    "设置焦点在go_grid 
    
exporting
      
control go_grid .
endform.                    " load_data_into_grid


*&--------------------------------------------------------------------*
*&      Form  fieldcat_init
*&--------------------------------------------------------------------*
form fieldcat_init using rt_fieldcat type lvc_t_fcat.
  
datals_fieldcat type lvc_s_fcat.

  
perform frm_catlg_set using:
  
'CARRID'  'X' '航班ID'       '' 'CARRID' 'SPFLI' rt_fieldcat,
  
'CONNID'  '' '连接'   'X'  ''      ''     rt_fieldcat,
  
'CITYTO'  '' '到达城市'   'X'  ''      ''     rt_fieldcat,
  
'CITYFROM'  '' 'CITYFROM'   'X'  ''      ''     rt_fieldcat.

endform.   "fieldcat_init

*---------------------------------------------------------------------*
*       FORM frm_catlg_set                                            *
*---------------------------------------------------------------------*
form frm_catlg_set using p_field p_key p_text p_edit ref_f ref_t
                          rt_fieldcat  
type lvc_t_fcat .
  
data:  tmp_fieldcat type lvc_s_fcat.

  tmp_fieldcat
-fieldname     =  p_field.
  tmp_fieldcat
-key           =  p_key .
  tmp_fieldcat
-scrtext_l     =  p_text.
  tmp_fieldcat
-edit          =  p_edit.
  tmp_fieldcat
-ref_field     ref_f.
  tmp_fieldcat
-ref_table     ref_t.

  
append tmp_fieldcat to rt_fieldcat .
  
clear tmp_fieldcat .
endform.                    " FRM_CATLG_SET

*&---------------------------------------------------------------------*
*&      Form  change
*&---------------------------------------------------------------------*
form change .
  
datals_stable type lvc_s_stbl.

  ls_stable
-row 'X'."行稳定更新
  ls_stable
-col 'X'."列稳定更新

  
if go_grid->is_ready_for_input( ) = 0.
    
call method go_grid->set_ready_for_input
      
exporting
        i_ready_for_input 
1.
  
else.
    
call method go_grid->check_changed_data
      
importing
        e_valid 
l_valid.
    
call method go_grid->set_ready_for_input
      
exporting
        i_ready_for_input 
0.
    
call method go_grid->refresh_table_display
      
exporting
        is_stable 
ls_stable
      
exceptions
        finished  
1
        
others    2.
  
endif.
endform.                    " change

*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
module status_0100 output.
  
set pf-status 'S_100'.
  gs_variant
-report sy-repid.

  
if go_grid is initial.
    
create object go_grid
      
exporting
        i_parent 
cl_gui_container=>screen0.
    
create object event_receiver.

    
set handler event_receiver->handle_data_changed for go_grid.

    
if sy-batch is initial.
      
call method go_grid->register_edit_event
        
exporting
*          i_event_id = cl_gui_alv_grid=>mc_evt_enter. "回车时触发
        i_event_id 
cl_gui_alv_grid=>mc_evt_modified"单元格更改触发
    
endif.

    
perform load_data_into_grid.
  
endif.
endmodule.                 " STATUS_0100  OUTPUT

*&---------------------------------------------------------------------*
*&      Form  ENTER
*&---------------------------------------------------------------------*
form enter .
  
dataucomm like sy-ucomm.

  ucomm 
'&DATA_SAVE'." '&REFRESH'.
  
call method go_grid->set_function_code
    
changing
      c_ucomm 
ucomm.
endform.                    " ENTER

*&---------------------------------------------------------------------*
*&      Form  HANDLE_DATA_CHANGED
*&---------------------------------------------------------------------*
form handle_data_changed using data_changed type ref to cl_alv_changed_data_protocol.
  
field-symbols<fs_mod_rows>  type standard table,
                 <fs_cells>     
type lvc_t_modi ,
                 <fs_cell_wa>   
type lvc_s_modi ,
                 <fs>           
like line of itab.

  
if not data_changed->mp_mod_rows is initial.
    
assign data_changed->mp_mod_rows->to <fs_mod_rows>.
    
assign data_changed->mt_mod_cells to <fs_cells>.
*    loop at <fs_mod_rows> assigning <fs>.
*      if <fs>-carrid = 'AA' .
*        read table <fs_cells> index sy-tabix assigning <fs_cell_wa>.
*        call method data_changed->add_protocol_entry
*          exporting
*            i_msgid     = 'OO'
*            i_msgty     = 'E'
*            i_msgno     = '000'
*            i_msgv1     = '不可以为ABC'
*            i_fieldname = 'AA'
*            i_row_id    = <fs_cell_wa>-row_id
**            i_tabix     = tabix
*             .
*      endif.
*    endloop.
  
endif.
*    BREAK-POINT.
  
MESSAGE 'dd' type 'S'.
endform.                    " HANDLE_DATA_CHANGED
*CL_ALV_CHANGED_DATA_PROTOCOL参数的常用方法和属性
*
*方法                   用途
*MODIFY_CELL            修改指定位置单元格的值
*GET_CELL_VALUE         获取单元格的值
*ADD_PROTOCOL_ENTRY     弹出一个消息,必须使用系统标准的消息类
*MODIFY_PROTOCOL_ENTRY  修改消息
*PROTOCOL_IS_VISIBLE    是否显示错误信息提示
*REFRESH_PROTOCOL       删除错误消息
*
*属性                   用途
*MT_PROTOCOL            LOGs
*MT_MOD_CELLS           更新的单元格信息
*MP_MOD_ROWS            更新了的行的信息
*MT_GOOD_CELLS          正确的CELL的值
*MT_DELETED_ROWS        被删除的行信息
*MT_INSERTED_ROWS       新插入的行信息

  评论这张
 
阅读(6770)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018