首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CL_GUI_ALV_GRID可编辑字段不刷新

CL_GUI_ALV_GRID可编辑字段不刷新
EN

Stack Overflow用户
提问于 2021-03-02 21:30:57
回答 1查看 2.9K关注 0票数 0

我有一个带有可编辑字段的ALV网格,如果我检查输入的数据并显示错误,ALV更新,如果我试图更改输入数据,其他情况下ALV不再更新。

PAI中的代码是:

代码语言:javascript
复制
    ls_layout-cwidth_opt = abap_true.  
    CREATE OBJECT go_alv     
     EXPORTING
      i_parent          = cl_gui_custom_container=>screen0
    EXCEPTIONS
      error_cntl_create = 1
      error_cntl_init   = 2
      error_cntl_link   = 3
      error_dp_create   = 4
      OTHERS            = 5. 

        IF sy-subrc EQ 0.
    
    *   Adapting field catalog
        CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
          EXPORTING
            i_structure_name       = 'ZAMOUNT'
          CHANGING
            ct_fieldcat            = lt_fieldcat.
        IF sy-subrc EQ 0. 
  *     Field catalog specifics       
        LOOP AT lt_fieldcat ASSIGNING <ls_fieldcat>. 
              IF  <ls_fieldcat>-fieldname = 'DMBTR'.
                <ls_fieldcat>-edit = abap_true.
              ENDIF.
    
          ENDLOOP.
        ENDIF.

    *   Show data usig ALV class
        go_alv->set_table_for_first_display(
                  EXPORTING
                    is_layout       = ls_layout
                  CHANGING
                    it_outtab       = gt_out
                    it_fieldcatalog = lt_fieldcat ).
    
          go_alv->set_ready_for_input( EXPORTING
            i_ready_for_input = 1 ).
    
          CALL METHOD go_alv->register_edit_event
            EXPORTING
              i_event_id = cl_gui_alv_grid=>mc_evt_enter.
    
          CALL METHOD go_alv->register_edit_event
            EXPORTING
              i_event_id = cl_gui_alv_grid=>mc_evt_modified.
      ENDIF.

PBO中的代码是:

代码语言:javascript
复制
        IF go_alv IS NOT INITIAL.

        CALL METHOD go_alv->check_changed_data( ).

        PERFORM check_amounts   TABLES gt_out
                              CHANGING gv_sum_amounts
                                       gv_tot_amount.

       
        CALL METHOD go_alv->refresh_table_display
          EXPORTING
            is_stable      = VALUE #( row = abap_true
                                      col = abap_true )
            i_soft_refresh = 'X'.           
            cl_gui_cfw=>flush( ).

    ENDIF.

在执行check_amounts中,如果用户修改了输入字段,并且在内部表中删除了错误,但在ALV中没有显示错误,则我将使用这些错误填充ALV的一个字段。

我还试图通过调用内部刷新来实现data_change_finished方法,但没有解决异常。

你能帮帮我吗?谢谢

EN

回答 1

Stack Overflow用户

发布于 2021-03-03 15:21:45

我不太清楚我是否理解你的问题,但以下是一些潜在的问题:

  1. 你的有效性检查被分开了。一方面,存在data_changed事件。另一方面,您有perform.
  • If check_amounts data_changed事件会发现一个输入错误,它会在网格上显示红色的轮廓。在您的内部表("gt_out")中,这个字段将与以前一样(它不会用无效的输入更新表!)。这可能是为什么您认为网格中应该有一条消息,但是在isn't.
  1. Did中,您为data_changed事件定义了自己的本地版本?比处理人员失踪的还要多。当您尝试在that.
  • Also事件中执行刷新时,您肯定需要data_changed_finished的处理程序,您说只将刷新放在data_changed_finished的方法中。那么,您也需要将check_amount的执行放在那里。否则,在用于

的方法中,您将刷新的时间提前到.

  • ,您可以从data_changed方法中自动更新表("gt_out")。您应该能够在这里更新它并使用refresh.
  1. I将其发送到网格--不喜欢调用PBO中的check_changed_data方法。由于register_edit_event调用,当您单击enter或跳转到下一个字段时,data_changed事件已经触发。通常只有在收到单独的用户命令时才调用此方法,该命令可以在事件触发之前触发,以确保您对此具有100%的正确data.
  • Not,但是对于register_edit_event调用,事件id cl_gui_alv_grid=>mc_evt_modified应该已经包含了事件id cl_gui_alv_grid=>mc_evt_enter。

我尝试定义一个本地类来处理data_changed和data_changed_finished事件,并将check_amount和刷新放在data_changed_finished事件的方法中。也许这些对你有帮助?如果您对此有任何疑问,请告诉我,我可以详细介绍。

问候

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66447451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档