面向对象ALV选择列

 通过  gs_layout-box_fname  'SEL'.设置选择行,不能取到 SEL列的值

找资料:作者:f122300349 
来源:CSDN 
原文:https://blog.csdn.net/f122300349/article/details/5517154 
版权声明:本文为博主原创文章,转载请附上博文链接

带选择列,是个什么概念,就是在ALV的表单主体前面多了一列可供选择的,具体就看下图:

这个就是对应的选择列,通过这个可以实现对ALV数据的选择,在调用函数的ALV和面向对象的ALV实现方法存在差异,下面讲两者的方法:

1)调用函数的ALV。

   通过 SLIS_LAYOUT_ALV-BOX_FIELDNAME的字段来设置,这个字段的值对应的是输出内表的一个字段名字(专门用于标记选择哪些列,选中的为‘X’),其实这种实现方法就跟平时我们增加一列复选择框用于选择的方法大致一样的,但是这种方法选择的方式比较快。
2)面向对象的ALV。

   通过结构 LVC_S_LAYO-SEL_MODE的了段来设置,这个字段对应的值有以下5个:
     1、sapce,等同于B,默认的设置。

     2、A(行与列的选择,无法选择单元格)。

     3、B(单选,不可以多选行,不可以多选单元格)。

     4、C(多选行、列,不可以多选单元格)。

     5、D(多选行、列,还可以多选单元格)。

只有设置的值为‘C’或者‘D’带选择列才可以显示出来,其它值一概不行。如果ALV输出有列是可以编辑,则会覆盖了sel_mode的值,带选择列也会显示出来的哦。

通过与1)种方法比较,很容易发现2)种方法没有通过内表的一个字段值来记录哪些值没选中了,那我们如何知道哪些列被选中了呢???有办法了,通过CL_GUI_ALV_GRID-> GET_SELECTED_ROWS的方法来获取选中列对应的在输出内表中的行ID了,具体就看下面的例子了:

DATA : LT_ROW TYPE  LVC_T_ROID,    "内表          
           LS_ROW TYPE  LVC_S_ROID.    "工作区

  ALV_GRID1->GET_SELECTED_ROWS
    IMPORTING
      ET_ROW_NO = LT_ROW.

    LOOP  AT  LT_ROW INTO  LS_ROW.
      READ  TABLE  T_OUTPUT INDEX  LS_ROW-ROW_ID.
      IF  SY-SUBRC EQ  0 .
        T_ARG-PASS = 0 .
        APPEND  T_OUTPUT TO  T_PRINT1.
      ENDIF .
      CLEAR  T_OUTPUT.
    ENDLOOP .
---------------------
作者:f122300349
来源:CSDN
原文:https://blog.csdn.net/f122300349/article/details/5517154
版权声明:本文为博主原创文章,转载请附上博文链接!

 

  DATA: lv_row TYPE i,
        lv_col TYPE i.
  DATA: ls_row_no   TYPE lvc_s_roid,
        ls_row_info TYPE lvc_s_row,
        ls_col_info TYPE lvc_s_col.
*  CALL METHOD grf_grid->check_changed_data.
*
*  CALL METHOD grf_grid->get_current_cell
*    IMPORTING
*      e_row = lv_row
*      e_col = lv_col.
*  CALL METHOD grf_grid->get_scroll_info_via_id
*    IMPORTING
*      es_row_no   = ls_row_no
*      es_row_info = ls_row_info
*      es_col_info = ls_col_info.

**获取所选的多行
  DATA: lt_row TYPE  lvc_t_roid,    "内表
        ls_row TYPE  lvc_s_roid.    "工作区

  CALL METHOD grf_grid->get_selected_rows
    IMPORTING
      et_row_no = lt_row.
  LOOP  AT  lt_row INTO  ls_row.
    READ  TABLE  gt_doc INTO gs_doc INDEX ls_row-row_id.
    IF sy-subrc EQ  0 .
      gs_doc-sel = 'X'.
      MODIFY gt_doc FROM gs_doc INDEX ls_row-row_id.
    ENDIF .
  ENDLOOP .

  gv_save_code = gv_ok_code.
  CLEAR: gv_ok_code.
  CASE gv_save_code.

    WHEN 'BACK' OR 'EXIT' OR 'CANC'.
      LEAVE TO SCREEN 0.

    WHEN 'DOC'.
      PERFORM frm_call_mb01.     "调用过账

  ENDCASE.

  CALL METHOD grf_grid->refresh_table_display.

  CALL METHOD grf_grid->set_scroll_info_via_id
    EXPORTING
      is_row_info = ls_row_info
      is_col_info = ls_col_info
      is_row_no   = ls_row_no.

实现可以选择行

 

 

 

 

转载于:https://www.cnblogs.com/rainysblog/p/10857350.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于SAP ALV报表的一数据修改,您可以按照以下步骤进行操作: 1. 首先,您需要获取对应的ALV表格对象。可以使用函数`cl_gui_alv_grid=>get_grid`获取ALV表格对象的引用。 2. 使用`get_table`方法获取ALV表格对象中的数据表。 3. 对获取到的数据表进行修改。例如,您可以使用内部表操作语句对数据表中的某一进行修改。 4. 最后,使用`set_table`方法将修改后的数据表重新设置给ALV表格对象。 下面是一个示例代码片段,展示了如何在SAP ABAP中修改ALV表格中的一数据: ```abap DATA: lo_alv_grid TYPE REF TO cl_gui_alv_grid, lt_data TYPE TABLE OF your_data_structure, "您的数据结构类型 ls_data TYPE your_data_structure. "您的数据结构类型 " 获取ALV表格对象 lo_alv_grid = cl_gui_alv_grid=>get_grid( ). " 获取ALV表格中的数据表 lt_data = lo_alv_grid->get_table( ). " 修改数据表中的一数据 LOOP AT lt_data INTO ls_data. ls_data-column_to_modify = 'your_new_value'. "修改需要修改的 MODIFY lt_data FROM ls_data. ENDLOOP. " 将修改后的数据表重新设置给ALV表格对象 lo_alv_grid->set_table( lt_data ). ``` 请注意,上述示例代码中的"your_data_structure"需要替换为您实际使用的数据结构类型,"column_to_modify"需要替换为您要修改的名,"your_new_value"需要替换为您要更新的新值。 希望对您有所帮助!如有任何疑问,请随时向我提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值