定义单元格级别的准备输入状态

本文介绍如何在ABAP中设置ALV Grid Control特定单元格的编辑状态。通过实例展示如何根据飞机座位数量调整价格字段的可编辑性,并提供了实现此功能的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 program bcalv_edit_02.
*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
* Purpose:
* ~~~~~~~~
* This report illustrates how to set chosen cells of an
* ALV Grid Control editable. (See BCALV_EDIT_01 for an overview
* of possible states).
* Remark: You may set the states for chosen columns using field
*         EDIT of the fieldcatalog, see BCALV_EDIT_03.
*-----------------------------------------------------------------
* To check program behavior
* ~~~~~~~~~~~~~~~~~~~~~~~~~
* Switch to the state editable and ready for input.
* You may then change the
* price of flights where the capacity of a plane is greater or equal
* than 300 seats.
*-----------------------------------------------------------------
* Essential steps (search for '?)
* ~~~~~~~~~~~~~~~
* 1.Extend your output table for a field, e.g., CELLTAB, that holds
*   information about the edit status of each cell for the
*   corresponding row (the table type is SORTED!).
* 2.After selecting data, set edit status for each row in a loop
*   according to field SEATSMAX.
* 2a.Use attribute CL_GUI_ALV_GRID=>MC_STYLE_ENABLED to set a cell
*    to status "editable".
* 2b.Use attribute CL_GUI_ALV_GRID=>MC_STYLE_DISABLED to set a cell
*    to status "non-editable".
* 2c.Copy your celltab to the celltab of the current row of gt_outtab.
* 3.Provide the fieldname of the celltab field by using field
*   STYLEFNAME of the layout structure.
*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

data: ok_code like sy-ucomm,
      save_ok like sy-ucomm,
      g_container type scrfname value 'BCALV_GRID_DEMO_0100_CONT1',
      grid1  type ref to cl_gui_alv_grid,
      g_custom_container type ref to cl_gui_custom_container,
      gs_layout type lvc_s_layo,
      g_max type i value 100.

*?.Extend your output table for a field, e.g., CELLTAB, that holds
*   information about the edit status of each cell for the
*   corresponding row (the table type is SORTED!).
data: begin of gt_outtab occurs 0.  "with header line
        include structure sflight.
data: celltab type lvc_t_styl.
data: end of gt_outtab.

*---------------------------------------------------------------------*
*       MAIN                                                          *
*---------------------------------------------------------------------*
call screen 100.

*---------------------------------------------------------------------*
*       MODULE PBO OUTPUT                                             *
*---------------------------------------------------------------------*
module pbo output.
  set pf-status 'MAIN100'.
  set titlebar 'MAIN100'.
  if g_custom_container is initial.
    create object g_custom_container
           exporting container_name = g_container.
    create object grid1
           exporting i_parent = g_custom_container.
    perform select_data_and_init_style.

*?.Provide the fieldname of the celltab field by using field
*   STYLEFNAME of the layout structure.
   gs_layout-stylefname = 'CELLTAB'.

   call method grid1->set_table_for_first_display
         exporting i_structure_name = 'SFLIGHT'
                   is_layout        = gs_layout
         changing  it_outtab        = gt_outtab[].

  endif.
endmodule.
*---------------------------------------------------------------------*
*       MODULE PAI INPUT                                              *
*---------------------------------------------------------------------*
module pai input.
  save_ok = ok_code.
  clear ok_code.
  case save_ok.
    when 'EXIT'.
      perform exit_program.
    when 'SWITCH'.
      perform switch_edit_mode.
    when others.
*     do nothing
  endcase.
endmodule.
*---------------------------------------------------------------------*
*       FORM EXIT_PROGRAM                                             *
*---------------------------------------------------------------------*
form exit_program.
  leave program.
endform.
*&---------------------------------------------------------------------*
*&      Form  SELECT_DATA_AND_INIT_STYLE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form select_data_and_init_style.
  data: lt_sflight type table of sflight with header line,
        lt_celltab type lvc_t_styl,
        l_index type i.

  select * from sflight into table lt_sflight up to g_max rows.
* move corresponding fields from lt_sflight to gt_outtab
  loop at lt_sflight.
    move-corresponding lt_sflight to gt_outtab.
    append gt_outtab.
  endloop.

*?.After selecting data, set edit status for each row in a loop
*   according to field SEATSMAX.
  loop at gt_outtab.
    l_index = sy-tabix.
    refresh lt_celltab.
    if gt_outtab-seatsmax ge 300.
        perform fill_celltab using 'RW'
                             changing lt_celltab.
    else.
        perform fill_celltab using 'RO'
                             changing lt_celltab.
    endif.
*?c.Copy your celltab to the celltab of the current row of gt_outtab.
    insert lines of lt_celltab into table gt_outtab-celltab.
    modify gt_outtab index l_index.
  endloop.
endform.                               " SELECT_DATA_AND_INIT_STYLE
*&---------------------------------------------------------------------*
*&      Form  FILL_CELLTAB
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_PT_CELLTAB  text
*----------------------------------------------------------------------*
form fill_celltab using value(p_mode)
                  changing pt_celltab type lvc_t_styl.
  data: ls_celltab type lvc_s_styl,
        l_mode type raw4.
* This forms sets the style of column 'PRICE' editable
* according to 'p_mode' and the rest to read only either way.

  if p_mode eq 'RW'.
*?a.Use attribute CL_GUI_ALV_GRID=>MC_STYLE_ENABLED to set a cell
*    to status "editable".
    l_mode = cl_gui_alv_grid=>mc_style_enabled.
  else. "p_mode eq 'RO'
*?b.Use attribute CL_GUI_ALV_GRID=>MC_STYLE_DISABLED to set a cell
*    to status "non-editable".
    l_mode = cl_gui_alv_grid=>mc_style_disabled.
  endif.

  ls_celltab-fieldname = 'CARRID'.
  ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
  insert ls_celltab into table pt_celltab.
  ls_celltab-fieldname = 'CONNID'.
  ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
  insert ls_celltab into table pt_celltab.
  ls_celltab-fieldname = 'FLDATE'.
  ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
  insert ls_celltab into table pt_celltab.
  ls_celltab-fieldname = 'PRICE'.
  ls_celltab-style = l_mode.
  insert ls_celltab into table pt_celltab.
  ls_celltab-fieldname = 'CURRENCY'.
  ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
  insert ls_celltab into table pt_celltab.
  ls_celltab-fieldname = 'PLANETYPE'.
  ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
  insert ls_celltab into table pt_celltab.
  ls_celltab-fieldname = 'SEATSMAX'.
  ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
  insert ls_celltab into table pt_celltab.
  ls_celltab-fieldname = 'SEATSOCC'.
  ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
  insert ls_celltab into table pt_celltab.
  ls_celltab-fieldname = 'PAYMENTSUM'.
  ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
  insert ls_celltab into table pt_celltab.

endform.                               " FILL_CELLTAB
*&---------------------------------------------------------------------*
*&      Form  SWITCH_EDIT_MODE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form switch_edit_mode.

  if grid1->is_ready_for_input( ) eq 0.
* set edit enabled cells ready for input
    call method grid1->set_ready_for_input
                     exporting i_ready_for_input = 1.

  else.
* lock edit enabled cells against input
    call method grid1->set_ready_for_input
                    exporting i_ready_for_input = 0.
  endif.
endform.                               " SWITCH_EDIT_MODE

生成一个数独游戏。 需求:使用 html,css和javascript开发一个基于网页的数独游戏,用户可以在浏览器中进行数独游戏的操作,包括填充数字、求解数独和重置游戏等功能。 功能要求: 核心功能: 数独棋盘展示: 显示一个 9x9 的数独棋盘,将棋盘划分为 9 个 3x3 的小九宫格。 初始时,部分单元格显示预定义的数字,部分单元格为空,等待用户输入。 数字输入: 用户可以点击空白单元格输入 1 - 9 的数字。 输入的数字应实时显示在单元格中。 求解功能: 用户点击 “求解” 按钮后,系统判断用户填写的结果是否正确,并将用户填写不正确的地方显示为红色。 如果数独无解,系统应弹出提示框告知用户。 用户点击“答案”按钮后,系统将正确的结果显示在数独中,并覆盖用户已经填写的内容。 重置功能: 用户点击 “重置” 按钮后,棋盘恢复到初始状态,用户之前输入的数字被清除。 随机功能: 用户点击"生成新谜题"可以随机生成新的谜题 界面设计要求: 布局 游戏界面应简洁美观,数独棋盘居中显示。 “求解” 、"生成新的谜题" “重置”和“答案” 按钮应位于棋盘下方,方便用户操作。 样式 棋盘单元格应具有清晰的边框,不同的小九宫格之间用较粗的边框分隔。 预定义的数字单元格和用户输入的数字单元格应有不同的背景颜色,以作区分。 按钮应具有明显的交互效果,如鼠标悬停时颜色变化。 交互设计要求: 点击反馈 用户点击单元格时,应给予视觉反馈,如单元格颜色变亮。 用户输入数字后,输入框应自动关闭。 按钮反馈 用户点击 “求解” 、 “重置” 和“答案”按钮时,按钮应出现短暂的点击效果,如颜色变深。 求解、重置和答案操作完成后,应给予相应的提示信息。 非功能要求: 性能要求 响应时间:用户点击单元格、按钮等操作后,系统应在 1 秒内做出响应。 求解时间:对于可解的数独谜题,系统应在 3 秒内完成求解并显示结果。 容错要求 输入验证:用户输入的数字应进行验证,确保输入的是 1 - 9 的有效数字。 要求 使用Vue2 实现
07-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值