使ALV控件中的内容可编辑
这应该是一个非常有用的功能,这样我们便可以用它来代替table control来编出一些有这现成功能的界面来。实际上,让alv中的内容可以被编辑与alv的事件无关。但是经常需要验证输入的数据,所以还是需要从事件开始谈起。
想使一列可以被编辑只需在field catalog中把edit字段设为’X’即可。如果设置了可编辑的字段那么alv便会添加相应的编辑按钮。如果不需要这些按钮那么可以按上面说过的方法排除他们。
如果想使某个单元格可编辑,那么就要用到上面所提到的把某个单元格作为按钮的那个内表。它的类型是LVC_T_STYL。向这个内表中添加记录,把需要字段名传给FIELDNAME,把cl_gui_alv_grid=>mc_style_enabled传给style以使这个字段可以被编辑,或者把cl_gui_alv_grid=>mc_style_disabled传给style以使这个字段不能被编辑。如果已经把整列设为可编辑,而只想让这个列中的某些单元格不可编辑,可以使用这种方法。正如前面所述,需要告诉layout那个字段是style字段。
Gs_layout-stylefname = ‘CELLSTYLES’.
下面是关于这些功能的一段代码:我们已经把’SEATSMAX’整列设为可编辑状态,但当CARRID为’xy’时除外。如果connid是’02’时我们就使‘PLANETYPE’可编辑。
我们把style table添加到了我们的显示表中,并在layout structure中说明style field。我们在field catalog中把相应的EDIT设为‘X’。
FORM adjust_edittables USING pt_list LIKE gt_list[].
DATA ls_listrow LIKE LINE OF pt_list.
DATA ls_stylerow TYPE lvc_s_styl.
DATA lt_styletab TYPE lvc_t_styl.
LOOP AT pt_list INTO ls_listrow.
IF ls_listrow-carrid = ‘XY’.
Ls_stylerow-fieldname = ‘SEATSMAX’.
Ls_stylerow-style = cl_alv_grid=>mc_style_disabled.
APPEND ls_stylerow TO lt_styletab.
ENDIF.
IF ls_listrow-connid = ‘02’.
Ls_stylerow-fieldname = ‘PLANETYPE’
Ls_stylerow-.style = cl_alv_grid=>mc_style_enabled.
APPEND ls_Pstylerow TO lt_styletab.
ENDIF.