1

问题是我希望我的 WD ALV 中的复选框列的某些单元格是可编辑的,某些单元格将是不可编辑的,具体取决于某些属性。

我采取下一步措施来达到所需的结果:

1)在对应的节点上添加属性READONLY类型WDY-BOOLEAN(属性CHECK类型WDY-BOOLEAN已经添加)。

2)然后在我的代码中检查表行中的一些条件并分配属性READONLY值abap_true或abap_false。

3)然后我将我的节点与表绑定。表格填写正确,我在调试器中检查。

4)配置我的alv:

  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' ).

但它不起作用,复选框列的所有单元格都是可编辑的,我没有得到复选框列的不可编辑单元格。

4

2 回答 2

0

要使字段A可编辑或只读,只需“将字段B的值用于 A 的只读属性”即可。

因此,据我了解,您有一列是复选框,并且您希望某些行是可编辑的,而其他行是只读的。

为此,您不需要创建输入字段,您唯一需要做的就是获取复选框列引用并将其只读属性设置为绑定到数据结构中的字段。

如果这仍然不起作用,请检查您的数据,每个记录的只读字段的值是否为'',如果是,那么当然,检查的每个单元格都是可编辑的。

于 2013-07-30T05:39:46.847 回答
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.

查看本指南以供参考。

于 2019-08-07T21:58:29.847 回答