本文介绍如何在SALV上添加可编辑的checkbox列,具体方法如下:
1,在SALV显示内表中为checkbox定义一个C类型的字段,
2,调用cl_salv_table->get_columns()取得全体列的类引用,
3,调用cl_salv_columns->get_column()取得checkbox列的类引用
4,通过cl_salv_column_list->set_cell_type( if_salv_c_cell_type=>checkbox_hotspot )将列设定为checkbox
5,定义事件on_link_click的响应handler ,在对应的方法中对checkbox进行赋值
完整代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 |
*&---------------------------------------------------------------------* *& 一个简单的通过类CL_SALV_TABLE生成SALV的例子 *&---------------------------------------------------------------------* REPORT z_salv_14. CLASS lcl_report DEFINITION DEFERRED. DATA: lo_report TYPE REF TO lcl_report. * 事件响应类定义 CLASS lcl_event_handler DEFINITION. * PUBLIC SECTION. METHODS: on_link_click FOR EVENT link_click OF cl_salv_events_table IMPORTING row column. * ENDCLASS. "lcl_event_handler DEFINITION *----------------------------------------------------------------------* * CLASS lcl_report DEFINITION *----------------------------------------------------------------------* CLASS lcl_report DEFINITION. * PUBLIC SECTION. * 定义SALV输出内表 TYPES: BEGIN OF ty_vbak, vbeln TYPE vbak-vbeln, erdat TYPE erdat, auart TYPE auart, kunnr TYPE kunnr, check(1) TYPE c, "定义Checkbox用的字段 END OF ty_vbak. DATA: t_vbak TYPE STANDARD TABLE OF ty_vbak. * ALV reference DATA: o_alv TYPE REF TO cl_salv_table. * METHODS: * 抽取数据 get_data, * * 生成输出内容 generate_output. * *$*$*.....CODE_ADD_1 - Begin..................................1..*$*$* * * 定义private method来设定SALV不同特性 PRIVATE SECTION. METHODS: set_pf_status CHANGING co_alv TYPE REF TO cl_salv_table. *$*$*.....CODE_ADD_1 - End....................................1..*$*$* ENDCLASS. "lcl_report DEFINITION *----------------------------------------------------------------------* * CLASS lcl_report IMPLEMENTATION *----------------------------------------------------------------------* * 类实现 CLASS lcl_report IMPLEMENTATION. * METHOD get_data. * 抽取数据 SELECT vbeln erdat auart kunnr INTO TABLE t_vbak FROM vbak UP TO 20 ROWS. * ENDMETHOD. "get_data *....................................................................... METHOD generate_output. * New ALV instance * We are calling the static Factory method which will give back * the ALV object reference. *...Get all the Columns DATA: lo_cols TYPE REF TO cl_salv_columns. DATA: lo_event_handler TYPE REF TO lcl_event_handler. * exception class DATA: lx_msg TYPE REF TO cx_salv_msg. TRY. cl_salv_table=>factory( IMPORTING r_salv_table = o_alv CHANGING t_table = t_vbak ). CATCH cx_salv_msg INTO lx_msg. ENDTRY. * *$*$*.....CODE_ADD_2 - Begin..................................2..*$*$* * * In this area we will call the methods which will set the * different properties to the ALV * 调用status设置方法 CALL METHOD set_pf_status CHANGING co_alv = o_alv. *$*$*.....CODE_ADD_2 - End....................................2..*$*$* * *...Process individual columns DATA: lo_column TYPE REF TO cl_salv_column_list. * lo_cols = o_alv->get_columns( ). * Change the properties of the Columns KUNNR TRY. lo_column ?= lo_cols->get_column( 'CHECK' ). lo_column->set_cell_type( if_salv_c_cell_type=>checkbox_hotspot ). lo_column->set_output_length( 10 ). CATCH cx_salv_not_found. "#EC NO_HANDLER ENDTRY. * * Get the event object DATA: lo_events TYPE REF TO cl_salv_events_table. lo_events = o_alv->get_event( ). * * Instantiate the event handler object CREATE OBJECT lo_event_handler. * * event handler SET HANDLER lo_event_handler->on_link_click FOR lo_events. * 调用Display方法将数据输出到屏幕上 o_alv->display( ). * ENDMETHOD. "generate_output * *$*$*.....CODE_ADD_3 - Begin..................................3..*$*$* * * In this area we will implement the methods which are defined in * the class definition * status设置方法实现 METHOD set_pf_status. DATA: lo_functions TYPE REF TO cl_salv_functions_list. * 设置默认的标准状态栏 lo_functions = co_alv->get_functions( ). lo_functions->set_default( abap_true ). ENDMETHOD. *$*$*.....CODE_ADD_3 - End....................................3..*$*$* * ENDCLASS. "lcl_report IMPLEMENTATION START-OF-SELECTION. CREATE OBJECT lo_report. * 抽取数据 lo_report->get_data( ). * 生成SALV lo_report->generate_output( ). *----------------------------------------------------------------------* * 事件响应类实现 *----------------------------------------------------------------------* CLASS lcl_event_handler IMPLEMENTATION. * METHOD on_link_click. * * Get the value of the checkbox and set the value accordingly * Refersh the table FIELD-SYMBOLS: <lfa_data> LIKE LINE OF lo_report->t_vbak. READ TABLE lo_report->t_vbak ASSIGNING <lfa_data> INDEX row. CHECK sy-subrc IS INITIAL. IF <lfa_data>-check IS INITIAL. <lfa_data>-check = 'X'. ELSE. CLEAR <lfa_data>-check. ENDIF. lo_report->o_alv->refresh( ). ENDMETHOD. "on_link_click * ENDCLASS. "lcl_event_handler IMPLEMENTATION |
运行后,显示出可编辑的checkbox。
以上。
发表评论