动态创建ALV内表 如何给其中一个字段表添加新条目

要求在点击修改数量按钮时 如果订单数量为0 的不可编辑其余可编辑
 

创建动态内表时 加入控制字段 
其中 WTY_PARTNER_DYNPRO为系统标准结构  STYL 为 控制表
 

在ALV 显示之前将 fieldcatalog 表中的 STYLE 删掉  要不然会DUMP

代码
    WHEN 'BJ_SL'. "修改数量
      CLEAR p_e_ucomm.

      DATA lt_styl TYPE lvc_t_styl.
      DATA ls_styl LIKE LINE OF lt_styl.
      FIELD-SYMBOLS <ft_styl>.
      TYPES :BEGIN OF ty_style,
               fieldname TYPE lvc_s_styl-fieldname,
               style     TYPE lvc_s_styl-style,
               style2    TYPE lvc_s_styl-style2,
               style3    TYPE lvc_s_styl-style3,
               style4    TYPE lvc_s_styl-style4,
               maxlen    TYPE lvc_s_styl-maxlen,
               tabix     TYPE sy-tabix,
             END OF ty_style.
      DATA lt_style TYPE TABLE OF ty_style.  " 记录每行不可编辑字段
      DATA ls_style TYPE ty_style.


      LOOP AT it_field_lvc INTO wa_field_lvc.
        CASE wa_field_lvc-fieldname+0(2).
          WHEN 'S_' OR 'B_'.
            wa_field_lvc-edit = 'X'.
          WHEN OTHERS.
            wa_field_lvc-edit = ''.
        ENDCASE.
        MODIFY it_field_lvc FROM wa_field_lvc.

        IF wa_field_lvc-fieldname+0(2) = 'S_' OR wa_field_lvc-fieldname+0(2) = 'B_'.
          LOOP AT <dyn_table> ASSIGNING FIELD-SYMBOL(<fs_alv>).
            ASSIGN COMPONENT wa_field_lvc-fieldname OF STRUCTURE <fs_alv> TO FIELD-SYMBOL(<fv_zb>).
            IF <fv_zb> = 0 .
              ls_style-tabix     = sy-tabix.
              ls_style-fieldname = wa_field_lvc-fieldname.
              ls_style-style     = cl_gui_alv_grid=>mc_style_disabled.
              APPEND ls_style TO lt_style.
            ENDIF.
          ENDLOOP.
        ENDIF.

        CLEAR wa_field_lvc.
      ENDLOOP.

      LOOP AT <dyn_table> ASSIGNING FIELD-SYMBOL(<fs_alv1>).
        " 定义临时表
        DATA(lt_style_ls) = lt_style.
        " 删除不是当前行的
        DELETE lt_style_ls WHERE tabix <> sy-tabix.

        IF lt_style_ls IS NOT INITIAL.
          ASSIGN COMPONENT 'STYLE'  OF STRUCTURE <fs_alv1> TO <ft_styl>.
          <ft_styl> = lt_style_ls.
        ENDIF.
        CLEAR lt_style_ls.
      ENDLOOP.

      CALL METHOD g_grid->set_frontend_fieldcatalog
        EXPORTING
          it_fieldcatalog = it_field_lvc.

      IF g_grid->is_ready_for_input( ) EQ 0.
        CALL METHOD g_grid->set_ready_for_input
          EXPORTING
            i_ready_for_input = 1.
      ENDIF.

这里注意我们不能直接定义一个内表为  <ft_styl> 添加值 会报错   <ft_styl>不是内部表 
不能使用 ASSIGNING FIELD-SYMBOL(<ft_styl>) 来定义 控制表  要单独定义  

FIELD-SYMBOLS <ft_styl>.
然后将统计好的数量为零的列给到控制表 <ft_styl>


效果图:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值