web dynpro alv复选框列的某些单元格是可编辑的,有些不可编辑,具体取决于某些条件

时间:2013-07-02 12:02:30

标签: checkbox webdynpro

专家。我是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',我必须看到一些单元格可编辑,有些单元格不可编辑)。

2 个答案:

答案 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以供参考。