標準ALV單元格(編輯,顏色,按鈕)

A>單元格處理
"---1定義
  data: begin of t_tab5 OCCURS 0,
         FLDNAME type LVC_T_SCOL,   "某單元格的顏色設定
         SEL    type c length 1,
         MARK   type c length 1,
         MATNR  like mara-matnr,
         MENGE  type c length 20,
        end of t_tab5.
"-----2賦值
  data: l_alvcolor type LVC_S_SCOL.
  l_alvcolor-fname = 'MATNR'.
  l_alvcolor-color-col = '7'.
  l_alvcolor-color-int = '1'.
  l_alvcolor-color-inv = '0'.
  l_alvcolor-nokeycol  = 'X'.
  append l_alvcolor to t_tab5-FLDNAME.

"  l_alvcolor-fname = 'MENGE'.
"  l_alvcolor-color-col = '7'.
"  l_alvcolor-color-int = '1'.
"  l_alvcolor-color-inv = '0'.
"  l_alvcolor-nokeycol  = 'X'.
"  append l_alvcolor to t_tab5-FLDNAME.

  append t_tab5.
  clear: t_tab5.  "記得清,否則t_tab5-FLDNAME以後再
                                               "append l_alvcolor to t_tab5-FLDNAME.還是按第一次的
"-----3,設定內表哪個字段是存放("某單元格的顏色設定)
gs_layout-coltab_fieldname = 'FLDNAME'.  "單元格


B>行處理
"---1定義
       data: begin of t_tab5 OCCURS 0,
         RCOLOR TYPE C LENGTH 1,   "某行的顏色設定
         SEL    type c length 1,
         MARK   type c length 1,
         MATNR  like mara-matnr,
         MENGE  type c length 20,
        end of t_tab5.
"-----2賦值
 t_tab5-rcolor = 'C710'.
append t_tab5.
"-----3,設定內表哪個字段是存放行的顏色
gs_layout-info_fieldname = 'RCOLOR'.   "行

C>列處理
"---1直接在顯示字段屬性中設定
gt_fieldcat-emphasize = 'C603'. "顏色,設置顏色時不可以與  關鍵值gt_fieldcat-key = 'X'.
一起使用

 

D>單元格是否可以修改&增加單擊按鈕
TYPE-POOLS: slis.
DATA: BEGIN OF ITAB OCCURS 0,
      ZQRFH_ICON TYPE STRING,
      ZLDATE TYPE string,
      "ZLUSR  TYPE ZLUSR,
      K TYPE STRING,
      FIELD_STYLE TYPE LVC_T_STYL, " 內表添加設置編輯狀態所需的欄位
      END OF ITAB.

CLASS LCL_EVENT_RECEIVER DEFINITION.
  PUBLIC SECTION.
    METHODS:
    HANDLE_BUTTON_CLICK
      FOR EVENT BUTTON_CLICK OF CL_GUI_ALV_GRID
      IMPORTING ES_COL_ID ES_ROW_NO.
ENDCLASS.

 

CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.
  METHOD HANDLE_BUTTON_CLICK.
    PERFORM BUTTON_CLICK USING ES_COL_ID ES_ROW_NO.
  ENDMETHOD.
ENDCLASS.

 

DATA: GV_EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER,
      GV_EVENTS type SLIS_T_EVENT.

data: s_fieldcat type LVC_S_FCAT,
      t_fieldcat type LVC_T_FCAT,
      X_LAYOUT type LVC_S_LAYO.

START-OF-SELECTION.

S_FIELDCAT-FIELDNAME = 'ZQRFH_ICON'. " 設置列可編輯
S_FIELDCAT-EDIT = 'X'.   "一定要先設可編輯
APPEND S_FIELDCAT TO T_FIELDCAT.
S_FIELDCAT-FIELDNAME = 'ZLDATE'. " 設置列可編輯
S_FIELDCAT-EDIT = 'X'.   "一定要先設可編輯
APPEND S_FIELDCAT TO T_FIELDCAT.

itab-ZLDATE = '1'.
itab-ZQRFH_ICON = 'click'.
append itab.
clear  itab.

itab-ZQRFH_ICON = 'click'.
itab-ZLDATE = '2'.
append itab.
clear  itab.

DATA STYLELIN TYPE LVC_S_STYL.
LOOP AT ITAB.
    "IF ITAB-ZXMDM = 'D' OR ITAB-ZXMDM = 'F' OR ITAB-ZXMDM = 'H'.
      STYLELIN-FIELDNAME = 'ZLDATE'. " 需要編輯的列名
      if itab-ZLDATE = '1'.
        STYLELIN-STYLE = '00100000'. "CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. "
設置不可編輯狀態
      endif.
      APPEND STYLELIN TO ITAB-FIELD_STYLE.
      CLEAR STYLELIN.
      STYLELIN-FIELDNAME = 'ZQRFH_ICON'. " 需要按鈕的列名
        STYLELIN-STYLE = '20000000'.
      APPEND STYLELIN TO ITAB-FIELD_STYLE.
      CLEAR STYLELIN.
      MODIFY ITAB.
   " ENDIF.
endloop.

X_LAYOUT-STYLEFNAME = 'FIELD_STYLE'. " 將內表中的欄位名存入顯示格式
PERFORM FM_EVENT_BUILD.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'"調用函數
    EXPORTING
      I_CALLBACK_PROGRAM       = SY-REPID
      I_DEFAULT                = 'X'
      I_SAVE                   = 'A'
     IT_FIELDCAT_LVC    = T_FIELDCAT
      IS_LAYOUT_LVC      = X_LAYOUT
      IT_EVENTS         = GV_EVENTS
      I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
    TABLES
      T_OUTTAB           = ITAB
    EXCEPTIONS
      PROGRAM_ERROR      = 1
      OTHERS             = 2.


END-OF-SELECTION.

 

FORM user_command USING rf_ucomm    LIKE sy-ucomm
                        rs_selfield TYPE slis_selfield .
*  FIELD-SYMBOLS: <fs>,<fs1>,<fs2>.
*  ASSIGN COMPONENT  6 OF STRUCTURE rs_selfield TO <fs>.
*  ASSIGN COMPONENT 14 OF STRUCTURE rs_selfield TO <fs1>.
*  ASSIGN COMPONENT  2 OF STRUCTURE rs_selfield TO <fs2>.
*  DATA: wa_analy LIKE gt_result.
*  READ TABLE gt_result INDEX <fs2> INTO wa_analy.
*  DATA: index        TYPE i.
*  DATA: answer       TYPE c.
*  DATA: refresh_list TYPE c.
*  DATA: cursor_pos   LIKE sy-tabix.
*  rs_selfield-tabindex = sy-tabix.

*---------------------------------------------------------------------------
  DATA ref TYPE REF TO cl_gui_alv_grid.
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = ref.
  CALL METHOD ref->check_changed_data.

 

  rs_selfield-refresh = 'X'.
*--------------------------------------------------------------------------


*  IF SY-UCOMM = '&PRIN' OR
*SY-UCOMM = '&RNT_PREV' OR
*SY-UCOMM = '&RNT' OR SY-UCOMM = 'PRIN' OR SY-UCOMM = 'PRNT'.
*    MESSAGE 'abc' TYPE 'E'.
*  ENDIF.


  CASE rf_ucomm.
    WHEN 'SELA'.
      "PERFORM sel_record USING 'X'.
    WHEN 'DELA'.
     " PERFORM sel_record USING ''.
    WHEN 'ZPRINTC'.
      "PERFORM GOODS_SLIP_LIST.    "????±?
*    WHEN 'ZPRINTB'.
*      G_FORMNAME = 'ZSPP_MOA'.
*      PERFORM set_data_to_print.
    WHEN 'ZPRINTA'.
      "G_FORMNAME = 'ZRPP031A_A5_N'.
      "PERFORM set_data_to_print.
    WHEN 'ZPRINTD'.
      "G_FORMNAME = 'ZRPP031A_A5_N'.
      "PERFORM set_data_to_print_b.
*    WHEN 'RETURN' OR 'BACK' OR 'CANCE'.
*      LEAVE TO SCREEN 0.
  ENDCASE.
  RS_SELFIELD-COL_STABLE = 'X'.  "°O???J?I
  RS_SELFIELD-ROW_STABLE = 'X'.  "°O???J?I
  RS_SELFIELD-REFRESH = 'X'.  "??·s??·s

ENDFORM.                    "USER_COMMAND

FORM FM_BUTTON USING E_GRID TYPE SLIS_DATA_CALLER_EXIT.
DATA GV_GRID TYPE REF TO cl_gui_alv_grid.
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
*   EXPORTING
*     IR_SALV_FULLSCREEN_ADAPTER       =
    IMPORTING
*     ET_EXCLUDING                     =
*     E_REPID                          =
*     E_CALLBACK_PROGRAM               =
*     E_CALLBACK_ROUTINE               =
      E_GRID                           = GV_GRID
*     ET_FIELDCAT_LVC                  =
*     ER_TRACE                         =
*     E_FLG_NO_HTML                    =
*     ES_LAYOUT_KKBLO                  =
*     ES_SEL_HIDE                      =
*     ET_EVENT_EXIT                    =
*     ER_FORM_TOL                      =
*     ER_FORM_EOL                      =
            .

  CREATE OBJECT GV_EVENT_RECEIVER.
  SET HANDLER GV_EVENT_RECEIVER->HANDLE_BUTTON_CLICK FOR GV_GRID.
ENDFORM.

FORM FM_EVENT_BUILD.
  DATA LV_EVENT LIKE LINE OF GV_EVENTS.
  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
   EXPORTING
     I_LIST_TYPE           = 0
   IMPORTING
     ET_EVENTS             = GV_EVENTS
   EXCEPTIONS
     LIST_TYPE_WRONG       = 1
     OTHERS                = 2
            .
  IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
*  LV_EVENT-NAME = 'CALLER_EXIT'.
*  LV_EVENT-FORM = 'FM_BUTTON'.
*  APPEND LV_EVENT TO GV_EVENTS.
*  delete GV_EVENTS where name = 'USER_COMMAND'.
*  LV_EVENT-NAME = 'USER_COMMAND'.
*  LV_EVENT-FORM = 'USER_COMMAND'.
*  APPEND LV_EVENT TO GV_EVENTS.


  READ TABLE GV_EVENTS WITH KEY NAME = 'CALLER_EXIT' INTO LV_EVENT .
  IF SY-SUBRC = 0 .
    LV_EVENT-FORM = 'FM_BUTTON' .
    APPEND LV_EVENT TO GV_EVENTS . "add form 'TOP_OF_PAGE' to the events,
  ENDIF.                        "perform the FORM 'to_of_page' .

ENDFORM.

DATA GV_GRID TYPE REF TO CL_GUI_ALV_GRID.

 

 

FORM BUTTON_CLICK USING P_COL_ID
                        P_ROW_NO TYPE lvc_s_roid.

  "READ TABLE ITAB_ALVDATA INTO WA_ALVDATA INDEX P_ROW_NO-ROW_ID.

  "PERFORM FM_DISPLAY_COMMENT.
  MESSAGE '123' type 'S' DISPLAY LIKE 'E'.
ENDFORM.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值