FUNCTION_ALV 下拉框的实现

news2024/11/25 7:57:07

下拉框可以用drdn_field或者使用DRDN_HNDL,这个文章主要是下拉框的基本使用,核心就是在fieldcat内表里面设置好下拉框的字段或者组的编号

文章目录

  • drdn_field
    • 使用DRDN_HNDL
    • 复制状态
    • 完整代码
    • 核心代码
    • 运行结果

drdn_field

在这里插入图片描述

使用DRDN_HNDL

在这里插入图片描述

复制状态

在这里插入图片描述

完整代码

*&---------------------------------------------------------------------*
*& Report Z_ALV_DROPDOWN
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*T_CODE         :
*CREATOR        :   LiuHongyu
*CREATE ON      :   2024827*TYPE           :   Report
*Description    :   ALV下拉框
**********************************************************************
*               Change History
* ----------    -------------  ----------   -------------
* Version       Date            Change By    Description
* ----------    -------------  ----------   -------------
* 1             2024.8.27        Hongyu.Liu   创建
**********************************************************************
REPORT Z_ALV_DROPDOWN.

*----------------------Variables--------------------------*
TYPES: BEGIN OF GTY_HEAD,
         CARRID    TYPE SPFLI-CARRID, "航线
         CONNID    TYPE SPFLI-CONNID, "航班号
         PRICE     TYPE SFLIGHT-PRICE, "价格
         PLANETYPE TYPE SFLIGHT-PLANETYPE, "航班类型
         DEPTIME   TYPE SPFLI-DEPTIME, "出发时间
         DD_HANDLE TYPE INT4, "用于分辨分组的编号
       END OF GTY_HEAD.
DATA: GS_HEAD TYPE GTY_HEAD.
TYPES: BEGIN OF GTY_ITEMS,
         CARRID    TYPE SPFLI-CARRID, "航线
         CONNID    TYPE SPFLI-CONNID, "航班号
         COUNTRYFR TYPE SPFLI-COUNTRYFR, "国家/地区
         CITYFROM  TYPE SPFLI-CITYFROM, "起飞城市
         CITYTO    TYPE SPFLI-CITYTO, "到达城市
         FLTIME    TYPE SPFLI-FLTIME, "航班时间
         DISTANCE  TYPE SPFLI-DISTANCE, "距离
         CARRNAME  TYPE SCARR-CARRNAME, "航线
         CURRCODE  TYPE SCARR-CURRCODE, "航线货币
         URL       TYPE SCARR-URL, "URL
       END OF GTY_ITEMS.

DATA: BEGIN OF GS_OUT.
        INCLUDE STRUCTURE GS_HEAD. "抬头
DATA:   DETAIL TYPE TABLE OF GTY_ITEMS,
      END OF GS_OUT.
DATA: GT_OUT LIKE TABLE OF GS_OUT. "定义和GS_OUT工作区结构一样的内表

DATA: GT_FIELDCAT TYPE LVC_T_FCAT,
      GS_FIELDCAT TYPE LVC_S_FCAT.
DATA: GS_LAYOUT   TYPE LVC_S_LAYO.   "ALV布局工作区

DATA:GS_DROP_DOWN TYPE LVC_S_DROP, "下拉框工作区
     GT_DROP_DOWN TYPE LVC_T_DROP. "下拉框内表

*定义事件内表
DATA:GT_EVENTS TYPE SLIS_T_EVENT,
     GS_EVENTS TYPE SLIS_ALV_EVENT.
*------------------------ Logic -----------------------------*

START-OF-SELECTION.
  PERFORM GET_DATA.
  PERFORM SET_FIELDCAT.
  PERFORM ALV_DISPLAY.



FORM CALLER_EXIT USING LS_DATA TYPE SLIS_DATA_CALLER_EXIT.
  DATA: L_REF_ALV TYPE REF TO CL_GUI_ALV_GRID.
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID = L_REF_ALV.
  CALL METHOD L_REF_ALV->SET_DROP_DOWN_TABLE
    EXPORTING
      IT_DROP_DOWN = GT_DROP_DOWN.
ENDFORM.



*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM GET_DATA .
  "抬头
  SELECT  CARRID,CONNID,PRICE FROM SFLIGHT WHERE CARRID = 'AZ' INTO TABLE @DATA(LT_HEAD) UP TO 20 ROWS.
  "细节
  SELECT A~CARRID,A~CONNID,COUNTRYFR,CITYFROM,CITYTO,FLTIME,DISTANCE,B~CARRNAME,B~CURRCODE,B~URL
    FROM SPFLI AS A
    LEFT JOIN SCARR AS B ON A~CARRID = B~CARRID
    FOR ALL ENTRIES IN  @LT_HEAD
    WHERE A~CARRID = @LT_HEAD-CARRID INTO TABLE @DATA(LT_ITEMS).

  LOOP AT LT_ITEMS ASSIGNING FIELD-SYMBOL(<FS_ITEM>).
    IF <FS_ITEM>-DISTANCE > 100.
      <FS_ITEM>-DISTANCE  = 100.
    ENDIF.
  ENDLOOP.

  LOOP AT LT_HEAD INTO GS_HEAD.
    APPEND INITIAL LINE TO GT_OUT ASSIGNING FIELD-SYMBOL(<FS_OUT>).
    <FS_OUT> = CORRESPONDING #( GS_HEAD ).
    <FS_OUT>-DETAIL = LT_ITEMS.
  ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SET_FIELDCAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM SET_FIELDCAT .
  """""""""""""""""构建ALV字段"""""""""""""""""""
  "动态字段名称赋值
  DATA: LO_TABDESCR TYPE REF TO CL_ABAP_STRUCTDESCR.
  DATA: LS_FIELD_IN TYPE DFIES,
        LT_DFIES    TYPE DDFIELDS.
  LO_TABDESCR ?= CL_ABAP_STRUCTDESCR=>DESCRIBE_BY_DATA( GS_OUT ).
  CALL METHOD CL_SALV_DATA_DESCR=>READ_STRUCTDESCR
    EXPORTING
      R_STRUCTDESCR = LO_TABDESCR
    RECEIVING
      T_DFIES       = LT_DFIES.

  LOOP AT LT_DFIES INTO LS_FIELD_IN.
    MOVE-CORRESPONDING LS_FIELD_IN TO GS_FIELDCAT.
    GS_FIELDCAT-REF_TABLE = LS_FIELD_IN-REFTABLE. "参照类型的表,搜索帮助,域控制
    GS_FIELDCAT-REF_FIELD = LS_FIELD_IN-REFFIELD. "参照类型字段
    IF GS_FIELDCAT-COLTEXT IS INITIAL. "当COLTEXT不存在显示SCRTEXT_M
      GS_FIELDCAT-COLTEXT = LS_FIELD_IN-SCRTEXT_M.
    ENDIF.
    "设置下拉框的字段
    IF GS_FIELDCAT-FIELDNAME = 'PLANETYPE'.
      GS_FIELDCAT-EDIT = 'X'. "可编辑
      GS_FIELDCAT-DRDN_FIELD = 'DD_HANDLE'. "设置下拉框的字段是DD_HEANDLE
    ENDIF.
    IF  GS_FIELDCAT-FIELDNAME = 'DEPTIME' . "如果是出发时间字段,直接把下拉框分组设置成3
      GS_FIELDCAT-DRDN_HNDL = '3'. "DRDN_HNDL设置成3
      GS_FIELDCAT-EMPHASIZE = 'C310'."带有颜色的高亮列
    ENDIF.
    IF GS_FIELDCAT-FIELDNAME <> 'DD_HANDLE'.
      APPEND GS_FIELDCAT TO GT_FIELDCAT.
    ENDIF.

    CLEAR: LS_FIELD_IN,GS_FIELDCAT.
  ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form ALV_DISPLAY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM ALV_DISPLAY .
  """""""""""""""""设置布局""""""""""""""""""
  GS_LAYOUT-ZEBRA = 'X'.
  GS_LAYOUT-CWIDTH_OPT = 'X'.


  """"""""""""""设置事件"""""""""""""""""""""
**把使 GRID 和 内表 连接在一起的事件存入事件内表
  GS_EVENTS-NAME = 'CALLER_EXIT'.    "这里是子例程名字
  GS_EVENTS-FORM = 'CALLER_EXIT'.     "这里是子例程名字
  APPEND GS_EVENTS TO GT_EVENTS.


  """""""""""""""""设置下拉框""""""""""""""""""
  "设置分组的字段的值
  LOOP AT GT_OUT INTO GS_OUT.
    IF GS_OUT-CONNID = '0555'.
      GS_OUT-DD_HANDLE = '1'.
    ELSE.
      GS_OUT-DD_HANDLE = '2'.
    ENDIF.

    MODIFY GT_OUT FROM GS_OUT.
    CLEAR GS_OUT.
  ENDLOOP.

  "设置下拉框
  DEFINE FILL_DROP.
    CLEAR GS_DROP_DOWN.
    GS_DROP_DOWN-HANDLE = &1.
    GS_DROP_DOWN-VALUE = &2.
    APPEND GS_DROP_DOWN TO GT_DROP_DOWN.
  END-OF-DEFINITION.
  FILL_DROP:'1' '大飞机'.
  FILL_DROP:'1' '小飞机'.
  FILL_DROP:'1' '中飞机'.
  FILL_DROP:'1' '漂亮飞机'.
  FILL_DROP:'1' '直升机'.
  FILL_DROP:'1' '战斗飞机'.
  FILL_DROP:'2' 'A飞机'.
  FILL_DROP:'2' 'B飞机'.
  FILL_DROP:'2' 'C飞机'.
  FILL_DROP:'3' '2024-08-01'.
  FILL_DROP:'3' '2024-08-02'.
  FILL_DROP:'3' '2024-08-03'.
  FILL_DROP:'3' '2024-08-07'.

  """""""""""""""""创建ALV"""""""""""""""""""
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
*     I_INTERFACE_CHECK  = ' '
*     I_BYPASSING_BUFFER = I_BYPASSING_BUFFER
*     I_BUFFER_ACTIVE    = I_BUFFER_ACTIVE
      I_CALLBACK_PROGRAM = SY-REPID
*     I_CALLBACK_PF_STATUS_SET          = ' '
*     I_CALLBACK_USER_COMMAND           = ' '
*     I_CALLBACK_TOP_OF_PAGE            = ' '
*     I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
*     I_CALLBACK_HTML_END_OF_LIST       = ' '
*     I_STRUCTURE_NAME   = I_STRUCTURE_NAME
*     I_BACKGROUND_ID    = ' '
*     I_GRID_TITLE       = I_GRID_TITLE
*     I_GRID_SETTINGS    = I_GRID_SETTINGS
      IS_LAYOUT_LVC      = GS_LAYOUT
      IT_FIELDCAT_LVC    = GT_FIELDCAT
*     IT_EXCLUDING       = IT_EXCLUDING
*     IT_SPECIAL_GROUPS_LVC             = IT_SPECIAL_GROUPS_LVC
*     IT_SORT_LVC        = IT_SORT_LVC
*     IT_FILTER_LVC      = IT_FILTER_LVC
*     IT_HYPERLINK       = IT_HYPERLINK
*     IS_SEL_HIDE        = IS_SEL_HIDE
*     I_DEFAULT          = 'X'
*     I_SAVE             = ' '
*     IS_VARIANT         = IS_VARIANT
      IT_EVENTS          = GT_EVENTS
*     IT_EVENT_EXIT      = IT_EVENT_EXIT
*     IS_PRINT_LVC       = IS_PRINT_LVC
*     IS_REPREP_ID_LVC   = IS_REPREP_ID_LVC
*     I_SCREEN_START_COLUMN             = 0
*     I_SCREEN_START_LINE               = 0
*     I_SCREEN_END_COLUMN               = 0
*     I_SCREEN_END_LINE  = 0
*     I_HTML_HEIGHT_TOP  = I_HTML_HEIGHT_TOP
*     I_HTML_HEIGHT_END  = I_HTML_HEIGHT_END
*     IT_ALV_GRAPHICS    = IT_ALV_GRAPHICS
*     IT_EXCEPT_QINFO_LVC               = IT_EXCEPT_QINFO_LVC
*     IR_SALV_FULLSCREEN_ADAPTER        = IR_SALV_FULLSCREEN_ADAPTER
* IMPORTING
*     E_EXIT_CAUSED_BY_CALLER           = E_EXIT_CAUSED_BY_CALLER
*     ES_EXIT_CAUSED_BY_USER            = ES_EXIT_CAUSED_BY_USER
    TABLES
      T_OUTTAB           = GT_OUT
* EXCEPTIONS
*     PROGRAM_ERROR      = 1
*     OTHERS             = 2
    .
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
  ENDIF.
ENDFORM.

核心代码

在这里插入图片描述

运行结果

┗( ▔, ▔ )┛
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2083221.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AcWing852.spfa判断负环

cnt数组表示&#xff1a;cnt【j】表示边j #include<iostream> #include<cstring> #include<algorithm> #include<queue> #define N 2010 #define M 10010 using namespace std; int n,m; int h[N],w[M],e[M],ne[M],idx; int dis[N],cnt[N]; bool st[N…

ps笔刷设置使用介绍

形状动态 建议开启&#xff0c;作用是笔刷会有粗细变换 传递 不透明度抖动 . 选择钢笔压力&#xff0c;作用就是压感&#xff0c;压力值&#xff0c;有粗细深浅轻重变化 调到这画的时候就不会特别浅 流量抖动 选择钢笔压力&#xff0c;开了就有虚边 方便画过渡。 一般画…

JavaWeb实战教程:如何一步步构建房产信息管理系统?MySQL助力数据管理

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…

Unable to delete file: .....(路径) signing-config.json无法删除

运行了一个去年很久之前的项目,在打包的时候弹出这个错误,提示要删除这个json文件,尝试了很多次无法删除,最后想到可能是文件权限的问题 Execution failed for task :app:clean. > Unable to delete file: D:\xxxxxx\xxxxxx\app\build\intermediates\signing_config\debug\…

基于Python、Django的企业门户网站设计

一、框架设计 1.1 创建项目和应用 企业门户网站的结构如下图所示。 因此,在文件夹下创建hengDaProject项目。在该项目下添加homeApp、aboutApp、newsApp、productsApp、serviceApp、scienceApp、contactApp应用。该操作参见:https://blog.csdn.net/qq_42148307/article/det…

【归纳总结】常见排序算法及其实现:直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快排、归并排序

思维导图&#xff1a; 目录 思维导图&#xff1a; 一、插入排序 1.直接插入排序&#xff1a; a:基本思想&#xff1a; b:基本步骤&#xff1a; c:复杂度分析 d:Java代码实现&#xff1a; 2.希尔排序&#xff08;缩小增量排序&#xff09; a:基本思想&#xff1a; c…

python_每天定时向数据库插入数据

每天的零点十分&#xff0c;定时向mysql数据库插入&#xff0c;昨天新增的文件和昨天下载文件的记录。第一次运行的时候&#xff0c;会全量同步昨天之前的数据。 import os import threading from datetime import datetime, timedelta import time import schedule from pymy…

仓颉编程语言亮相全国大学生计算机系统能力大赛

2024年8月18日-22日&#xff0c;由全国高等学校计算机教育研究会、系统能力培养研究专家组、系统能力培养研究项目发起高校主办&#xff0c;杭州电子科技大学承办的2024全国大学生计算机系统能力大赛编译系统设计赛&#xff08;华为毕昇杯&#xff09;及操作系统设计赛在杭电下…

企业防泄密首选!哪款公司防泄密软件更强?看这里,一文解惑!

早在2011年&#xff0c;前苹果员工Paul Devine泄露苹果公司的机密信息&#xff0c;涉及新产品的预测、计划蓝图、价格和产品特征&#xff0c;还为苹果公司的合作伙伴、供应商和代工厂商提供的关于苹果公司的数据&#xff0c;这使得这些供应商和代工厂商拥有了与苹果谈判的筹码&…

Wireless Communications - 模拟调制

AM/DSB/VSB/SSB的调制与解调 AM DSB SSB 滤波法 相移法 VSB 相干解调 线性调制的抗噪声分析 DSB SSB FM/PM 的调制与解调 NBFM WBFM 调频信号的产生和解调 模拟调制对比

SpringBootFFmpeg实现M3U8切片转码播放(本地)

文章目录 参考概述代码pom.xmlffmpegFFmpegUtilsMediaInfoTranscodeConfig application.ymlApplicationUploadControllerindex.html 测试 参考 springboot-ffmpeg-demo gitee代码 SpringBoot FFmpeg实现一个简单的M3U8切片转码系统 FFmpeg音视频核心技术精讲 - 百度网盘 概…

【STM32】红外遥控

红外遥控&#xff0c;掌握了就能装逼了&#xff0c;哈哈哈哈哈哈。 大部分图片来源&#xff1a;正点原子HAL库课程 专栏目录&#xff1a;记录自己的嵌入式学习之路-CSDN博客 1 器件特性 这里载波发射周期的发射与不发射时间实际上是因为载波是38kHz、占空为三分之一的方波&a…

符号译码_网络同步赛

哎……又是 If平推字符 #include <bits/stdc++.h> using namespace std; signed main(){char x;while(cin>>x){if(x==1){cin>>x;if(x==1)cout<<">";else if(x == 0){cin>>x;if(x==1)cout<<"]";else if(x==0)cout&…

Three.js湖边小屋,包含gltf渲染、天空和水纹、光照阴影、运动的点光源、相机位置和文字切屏、粒子效果等

前期准备 使用vue3vitethree.jsgsap 开发 npm install three gsap 代码 <script setup> // 导入three.js import * as THREE from three; // 导入轨道控制器 import { OrbitControls } from three/examples/jsm/controls/OrbitControls.js; // 加载模型 import { GLT…

SQLserver中的游标的分类和游标的生命周期

SQLserver中的游标的分类 在 SQL Server 中&#xff0c;游标&#xff08;Cursor&#xff09;是一种数据库对象&#xff0c;用于逐行处理结果集中的数据。游标可以用于复杂的数据处理任务&#xff0c;尤其是那些不能通过简单的 SELECT 语句和 JOIN 操作完成的任务。SQL Server …

网络通信---三次握手

文章目录 概述第一次握手第二次握手第三次握手整体看下 小结 概述 “三次握手”&#xff08;Three-way Handshake&#xff09;是TCP/IP协议中建立一个可靠的连接时使用的一种机制。这个过程确保了两个网络实体&#xff08;通常是两台计算机&#xff09;在开始数据传输之前能够…

std::futrue异步操作结果的三种搭配使用

目录 一、std::future 应用场景 二、使用 std::async关联异步任务 三、使用std::packaged_task和std::future配合 四、std::promise和std::future配合 一、std::future std::future是C11标准库中的⼀个模板类&#xff0c;它表⽰⼀个异步操作的结果。当我们在多线程编程中使…

VBA技术资料MF194:屏蔽右键菜单

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

云计算概述

云计算的产生以及发展 分布式计算&#xff1a;包含了云计算和网格计算 云计算&#xff1a;以数据为中心进行的计算 网格计算&#xff1a;以计算为中心进行的计算 诞生-1999 初期的发展-2007-2008 加速发展-2009-2014 日渐成熟阶段-2015-目前 云计算的种类 公有云-第三方提供…

第74集《大佛顶首楞严经》

请大家打开讲义第一百六十三页。我们讲到丑一&#xff0c;圆破色阴超劫浊。 在整个五阴的对治当中&#xff0c;第一个所要对治的&#xff0c;最粗重的就是色阴&#xff1b;色阴所引生的根结&#xff0c;就是动静两种的结相。当我们开始在闻的功能当中&#xff0c;不再攀缘外在…