专家。我是Web Dynpro的初学者。
我有ALV表。问题是我希望复选框列的某些单元格可以编辑,某些单元格将根据某些属性不可编辑。
我接下来要完成所需的结果:
1)将属性READONLY(键入WDY-BOOLEAN)添加到相应的节点(属性CHECK类型WDY-BOOLEAN已添加)。
2)然后在我的代码中我检查我的表行中的一些条件并分配属性READONLY值abap_true或abap_false。
3)然后我用表格绑定我的节点(表格填写绝对正确(我在调试器中控制它))
4)配置我的alv:
" create an instance of ALV component
" get reference to the ALV model
DATA:
lo_table_settings TYPE REF TO if_salv_wd_table_settings,
lo_column_settings TYPE REF TO if_salv_wd_column_settings,
lo_column TYPE REF TO cl_salv_wd_column.
lo_column_settings ?= lv_value.
lo_table_settings ?= lv_value.
lo_column = lv_value->if_salv_wd_column_settings~get_column( 'CHECK' ).
DATA lr_checkbox TYPE REF TO cl_salv_wd_uie_checkbox.
" create checkbox
CREATE OBJECT lr_checkbox
EXPORTING
checked_fieldname = 'CHECK'.
" make our table is editable
lo_table_settings->set_read_only( abap_false ).
lo_column = lo_column_settings->get_column( 'CHECK' ).
**Creating UI Elmenent 'INPUT FIELD' to make the column editable
DATA: lr_input_field TYPE REF TO cl_salv_wd_uie_input_field.
CREATE OBJECT lr_input_field EXPORTING value_fieldname = 'CHECK'.
lr_checkbox->set_read_only_fieldname( value = 'READONLY' ).
lv_value->if_salv_wd_column_settings~delete_column( ID = 'READONLY' ).
但它不起作用。 checbox列的所有单元格都是可编辑的,我不会得到checbox列的不可编辑单元格(虽然根据我的字段'READONLY',我必须看到一些单元格可编辑,有些单元格不可编辑)。
答案 0 :(得分:0)
要使字段 A 可编辑或只读,只需“将字段 B 的值用于A的只读属性”。
因此,据我所知,您有一个复选框,您希望某些行可以编辑,其他行只能读取。
为此,您不需要创建输入字段,您唯一需要做的就是获取复选框列引用并将其readonly属性绑定设置为数据结构中的字段。
如果仍然不起作用,请检查您的数据,每个记录的只读字段的值是否为'',如果是,那么当然,支票的每个单元格都是可编辑的。
答案 1 :(得分:0)
您的第一步是正确的。在调用网格之前,已将类型为READONLY
的属性WDY-BOOLEAN
添加到节点并为其分配了abap_true
值。
下一步是为您要使其可编辑的每个字段/行创建输入字段引用,并将此引用分配给字段属性READONLY,并仅针对符合条件的行更改此属性。
这是示例代码:
初始分配
loop at lt_table assigning field-symbol(<fs_table>).
<fs_table>-read_only = abap_true. " non editable
endloop.
设置列可编辑性
* input type reference
data lr_input type ref to cl_salv_wd_uie_input_field.
* Retrieving all column id and reference
call method lv_value->if_salv_wd_column_settings~get_columns
receiving
value = data(lt_columns).
loop at lt_columns into ls_columns.
* Assigning column reference
data(lr_column) = ls_columns-r_column.
* Creating input field UI Element
create object lr_input
exporting
value_fieldname = ls_columns-id.
*Assigning input field to column to make it as editable
call method lr_column->set_cell_editor
exporting
value = lr_input.
* binding input field ref to READONLY field
lr_input->set_read_only_fieldname( value = "READONLY" ).
endloop.
根据条件使单行可编辑
loop at lt_table assigning field-symbol(<fs_table>).
if smth = abap_true
<fs_table>-read_only = abap_false. " non editable
endif.
endloop.
检查this guide以供参考。